首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言字符串反轉算法:雙指針原地交換實現詳解

     編輯:程式設計綜合問答

題目要求

將字符串 "1234567" 原地反轉為 "7654321",補全代碼空白處。

完整代碼

main() {
    int i, j, k;                // 空白處補全:定義臨時變量 k
    char str[] = "1234567";     // 注意:{} 初始化列表僅用於數組,字符串用雙引號
    for (i = 0, j = strlen(str) - 1; i < j; i++, j--) {
        k = str[i];
        str[i] = str[j];
        str[j] = k;
    }
    printf("%s\n", str);        // 輸出:7654321
}

關鍵點解析

  1. j = strlen(str) - 1:字符串長度 7,最後一個字符下標為 6,故需 -1。
  2. 循環條件 i < j:雙指針向中間逼近,相遇或交錯停止,避免重複交換中間字符(奇數長度)。
  3. 臨時變量 k 必須定義在外層或循環內,用於交換。

常見錯誤

  • j = strlen(str) 導致越界訪問 str[7](\0 終止符)。
  • 使用 char str[] = {"1234567"} 大括號初始化字符數組,編譯器可能警告或報錯。
  • 忘記包含 <string.h> 導致 strlen 隱式聲明警告。

進階思考

若字符串包含多字節字符(UTF-8 中文),按字節反轉會破壞編碼,需按字符(Unicode 碼點)反轉,可使用 wchar_t 或 ICU 庫處理。

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