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

C 語言字串反轉完全指南:從整數陣列到字串的演算法優化之路

     編輯:關於C語言

整數陣列反轉:基礎邏輯建立

對 {1,2,3,4,5} 反轉為 {5,4,3,2,1},雙指標對稱交換:

for (int i = 0; i < SIZE/2; i++) {
    int tmp = arr[i];
    arr[i] = arr[SIZE - i - 1];
    arr[SIZE - i - 1] = tmp;
}
  • 奇數長度:中間元素 i == SIZE/2 不需交換。
  • 偶數長度:i < SIZE/2 自然涵蓋所有配對。

字串反轉的關鍵差異:結尾 NUL 字元

字串 = 字元陣列 + '\0' 結尾。直接套用整數反轉會把 '\0' 移到索引 0,導致字串視覺長度為 0,後續內容雖在記憶體中但不可見,甚至造成緩衝區讀取錯誤。

正確策略:只反轉有效字元('\0' 前的子陣列)

char str[SIZE] = "China";
int len = 0;
while (str[len] != '\0') len++;  // 或用 strlen(str)

for (int i = 0; i < len/2; i++) {
    char tmp = str[i];
    str[i] = str[len - i - 1];
    str[len - i - 1] = tmp;
}
// str 變為 "anihC"

完整可執行範例

#include <stdio.h>
#define SIZE 10

int main() {
    char st[SIZE] = "China";
    int len = 0;
    while (st[len] != '\0') len++;

    for (int i = 0; i < len/2; i++) {
        char tmp = st[i];
        st[i] = st[len - i - 1];
        st[len - i - 1] = tmp;
    }
    puts(st);  // 輸出: anihC
    return 0;
}

進階延伸:字串指標陣列排序

若需對多字串排序,建立 char *arr[] 指向各字串,對指標陣列排序(交換指標而非複製字串),效率高且程式碼簡潔。

總結

字串反轉的核心在於識別有效長度(排除 NUL),再套用雙指標對稱交換。此思維「計算子陣列長度 → 套用通用演算法」是解決字串操作問題的通用模式,亦可延伸至字串排序、去重等任務。

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