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

C 語言原地字串反轉:雙指標對稱交換法與標準庫替代方案

     編輯:關於C語言

C 語言原地字串反轉:雙指標對稱交換法與標準庫替代方案

雙指標演算法 (原地、O(1) 空間)

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;
}

遞迴版本 (教學用,空間 O(n))

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);

標準庫替代

  • C 無標準 strrev (MSVC 有 _strrev,非標準)。
  • C++ std::reverse(str.begin(), str.end())。
  • Glib g_strreverse。

常見錯誤

  • char *s = "abc"; reverse(s); → 崩潰 (修改唯讀記憶體)。
  • 忘記 \0 位置:反轉不動 \0,因 right 從 strlen-1 開始。
  • 中文/多位元組字元:此法按位元組反轉,會破壞 UTF-8 編碼,需用 Unicode 庫處理。

雙指標交換是原地反轉的經典模式,同樣適用於陣列反轉、鏈表反轉等問題。

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