方法一:字元陣列 + 手動尋找結尾
#include <iostream>
using namespace std;
int main() {
char a[50];
cout << "please input a string: ";
cin >> a; // 注意:cin 遇空白停止,含空白請用 cin.getline(a, 50)
int i = 0, k = 0;
while (i < 50) {
if (a[i] == '\0') { // 找到字串結尾
k = i;
break;
}
i++;
}
cout << "reverse order: ";
for (; k >= 0; k--) {
cout << a[k];
}
cout << endl;
return 0;
}
方法二:使用 strlen() 取得長度
#include <iostream>
#include <cstring> // strlen 需此標頭
using namespace std;
int main() {
char a[50];
cout << "please input a string: ";
cin >> a;
int k = strlen(a); // 取得有效長度 (不含 \0)
cout << "Reverse order: ";
for (; k >= 0; k--) {
cout << a[k];
}
cout << endl;
return 0;
}
補充:C++ 風格 string 反轉
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string s;
cout << "input: ";
getline(cin, s); // 可含空白
reverse(s.begin(), s.end());
cout << "reversed: " << s << endl;
return 0;
}
比較表
| 方法 | 優點 | 缺點 | 適用場景 |
| 字元陣列 + 手動找 \0 | 無需額外標頭、理解底層 | 固定緩衝區、易溢位、cin 不支援空白 | 教學、嵌入式無 STL 環境 |
| 字元陣列 + strlen | 標準庫函式、簡潔 | 同樣固定緩衝區、cin 不支援空白 | C 風格字串處理 |
| std::string + reverse | 動態記憶體、支援空白、STL 演算法 | 需 C++ 執行環境 | 現代 C++ 專案首選 |
常見錯誤提醒
cin >> a 遇空白/換行停止,輸入「Hello World」只讀到「Hello」。請用 cin.getline(a, 50) 或 getline(cin, s)。
- 迴圈條件
k >= 0 會輸出 a[0] 後 k 變 -1 (若為 unsigned 會無限迴圈),建議用 int k = len - 1; k >= 0; --k。
- 反轉包含 \0 位置會導致輸出提早結束,應從
len-1 開始。