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

C語言手寫 strlen:指針迭代與遞歸兩種實現

     編輯:關於C語言

C語言手寫 strlen:指針迭代與遞歸兩種實現

計算字符串長度(不含結束符 '\0')是指針操作基礎練習。本文展示指針迭代版與遞歸版。

方法一:指針迭代(標準庫風格)

#include <assert.h>

int my_strlen_ptr(const char *str) {
    assert(str);
    int count = 0;
    while (*str++) count++;
    return count;
}

*str++ 先取值判斷非零,再指針後移。簡潔高效。

方法二:遞歸實現(教學演示)

int my_strlen_rec(const char *str) {
    if (*str == '\0') return 0;
    return 1 + my_strlen_rec(str + 1);
}

遞歸關係:strlen(s) = 1 + strlen(s+1),基線 *s=='\0' → 0。

測試主函數

int main() {
    char *s = "abcdef";
    printf("指針版:%d\n", my_strlen_ptr(s));
    printf("遞歸版:%d\n", my_strlen_rec(s));
    system("pause");
    return 0;
}

對比總結

版本時間空間優點缺點
指針迭代O(n)O(1)高效、無棧溢出風險需理解指針運算
遞歸O(n)O(n)邏輯清晰、教學價值高長字符串棧溢出、效率低

常見錯誤避坑

  • 忘記處理 NULL 指針 → 加 assert 或返回錯誤碼
  • 遞歸基線條件寫錯(如 if (!str) 而非 if (*str=='\0'))
  • 指針版中 while (*str++) 寫成 while (str++)(判斷指針而非字符)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved