#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 變 2i=2 (真) → 執行體 → i 變 1i=1 (真) → 執行體 → i 變 0i=0 (假) → 循環結束s[i] 訪問的是自減後的值(2,1,0),恰好是倒序索引。對比 i--, j-- 和 j--, i-- 在逗號表達式中的求值順序:逗號表達式取最後一個值作為條件。
- for(; i--, j--;) 以 j-- 結果為條件,j 遞減到 -1 才結束,導致 i 越界訪問崩潰。
- for(; j--, i--;) 以 i-- 為條件,正常結束。
C# 無隱式 int→bool 轉換,需顯式判斷:
for (int i = s.Length; i > 0; ) {
Console.Write(s[--i]);
}
利用後置遞減在條件判斷中的特性,可寫出極簡的反轉循環。雖屬技巧,但能加深對 C/C++ 表達式求值順序的理解。