void reverse_inplace(char *str) {
char *left = str;
char *right = str + strlen(str) - 1;
while (left < right) {
char tmp = *left;
*left++ = *right;
*right-- = tmp;
}
}
#include <stdio.h>
#include <string.h>
int main() {
char buf[] = "abcdefg"; // 必須是可修改陣列,非字串常數
printf("原始: %s\n", buf);
reverse_inplace(buf);
printf("反轉: %s\n", buf); // gfedcba
return 0;
}
void reverse_recursive(char *left, char *right) {
if (left >= right) return;
char tmp = *left;
*left = *right;
*right = tmp;
reverse_recursive(left+1, right-1);
}
// 呼叫: reverse_recursive(str, str+strlen(str)-1);
strrev (MSVC 有 _strrev,非標準)。std::reverse(str.begin(), str.end())。g_strreverse。char *s = "abc"; reverse(s); → 崩潰 (修改唯讀記憶體)。\0 位置:反轉不動 \0,因 right 從 strlen-1 開始。雙指標交換是原地反轉的經典模式,同樣適用於陣列反轉、鏈表反轉等問題。