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

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

     編輯:關於C

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

#include <stdio.h>
#include <assert.h>

int my_strlen(const char *str) {
    assert(str);                // 防禦性編程
    int count = 0;
    while (*str++) count++;     // 移動指針直到 \0
    return count;
}

int main() {
    char *s = "abcdef";
    printf("%d\n", my_strlen(s)); // 6
    return 0;
}

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

int my_strlen(const char *str) {
    if (*str == '\0') return 0;          // 基線條件
    return 1 + my_strlen(str + 1);       // 遞歸步驟
}

遞歸展開過程 (以 "abc" 為例)

strlen("abc")
= 1 + strlen("bc")
= 1 + (1 + strlen("c"))
= 1 + (1 + (1 + strlen("")))
= 1 + 1 + 1 + 0 = 3

對比與建議

維度迭代遞歸
時間複雜度O(n)O(n)
空間複雜度O(1)O(n) 棧幀
棧溢出風險無長字符串會溢出
工程適用性生產環境首選教學/面試展示

關鍵點

  • 參數用 const char* 防止誤修改;
  • assert 捕獲空指針;
  • 遞歸版需編譯器支持尾調用優化才實用,C 標準不保證。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved