首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

一種巧妙的字符串反轉寫法(C/C++)

     編輯:關於C++

一、代碼展示

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s;
    cin >> s;
    for (int i = s.size(); i--; ) {
        cout << s[i];
    }
    return 0;
}
// 輸入: abc  輸出: cba

二、原理分析

關鍵在 for (int i = s.size(); i--; ):

  • 初始 i = s.size()(如 3)
  • 條件判斷 i--:先使用當前值判斷真假,再自減。
    - 第一次:i=3 (真) → 執行體 → i 變 2
    - 第二次:i=2 (真) → 執行體 → i 變 1
    - 第三次:i=1 (真) → 執行體 → i 變 0
    - 第四次:i=0 (假) → 循環結束
  • 循環體內 s[i] 訪問的是自減後的值(2,1,0),恰好是倒序索引。

三、驗證實驗

對比 i--, j-- 和 j--, i-- 在逗號表達式中的求值順序:逗號表達式取最後一個值作為條件。
- for(; i--, j--;) 以 j-- 結果為條件,j 遞減到 -1 才結束,導致 i 越界訪問崩潰。
- for(; j--, i--;) 以 i-- 為條件,正常結束。

四、C# 版本

C# 無隱式 int→bool 轉換,需顯式判斷:

for (int i = s.Length; i > 0; ) {
    Console.Write(s[--i]);
}

五、總結

利用後置遞減在條件判斷中的特性,可寫出極簡的反轉循環。雖屬技巧,但能加深對 C/C++ 表達式求值順序的理解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved