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

C 語言字符串反轉三種實現:雙指針交換、遞歸打印、遞歸原地反轉

     編輯:關於C

方法一:雙指針原地交換(最通用、O(1) 空間)

char *reverse(char *str) {
    if (!str) return NULL;
    int len = strlen(str);
    for (int l = 0, r = len - 1; l < r; ++l, --r) {
        char tmp = str[l];
        str[l] = str[r];
        str[r] = tmp;
    }
    return str;
}

方法二:遞歸打印反序(不修改原串、O(n) 棧空間)

void reverse_print(const char *str) {
    if (!str || !*str) return;
    reverse_print(str + 1); // 先遞歸到末尾
    putchar(*str);          // 回溯時輸出
}

方法三:遞歸原地反轉(教學演示、O(n) 棧空間)

int my_strlen(const char *s) {
    return *s ? 1 + my_strlen(s+1) : 0;
}

char *reverse_recursive(char *str, int len) {
    if (len <= 1) return str;
    char tmp = str[0];
    str[0] = str[len-1];
    str[len-1] = '\0';                 // 暫時截斷,避免下層處理末尾
    reverse_recursive(str + 1, len - 2);
    str[len-1] = tmp;                  // 恢復末尾字符
    return str;
}

int main() {
    char s[] = "abcdef";
    reverse_recursive(s, my_strlen(s));
    printf("%s\n", s); // fedcba
    return 0;
}

對比總結

方法修改原串空間適用場景
雙指針是O(1)生產環境首選
遞歸打印否O(n)僅需反序輸出
遞歸原地是O(n)教學/面試展示遞歸思想

工程建議

生產代碼請使用 方法一。遞歸版僅用於理解「棧幀保存狀態、回溯時處理」的遞歸本質。

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