C語言實現strlen函式的幾種方法

2022-05-30 12:39:07 字數 1138 閱讀 4905

傳說常見的乙個筆試題:不使用中間變數求const字串長度,即實現求字串長度庫函式strlen函式。函式介面宣告如下:int strlen(const char *p);

思路分析:

在字串中通常可以利用最後乙個結束符』\0』,但此處引數為const,唯讀,那麼我們不能打他的主意。

函式執行過程中不占用記憶體基本不可能,除非都使用了暫存器。「不使用中間變數」只是說程式設計師不能顯示的申請記憶體而已,即不能有區域性變數或者動態記憶體申請。

如果函式自動申請棧記憶體或者使用暫存器儲存變數,或者使用立即數定址即常量,那麼就相當於「不使用中間變數」。

從函式原型看,返回值為int,那麼在函式內部必定需要乙個地方儲存這個值,要麼是常數要麼是暫存器。長度不為1時不能一次就求出來,說明必須有遞迴調 用,這樣遞迴時函式會自動申請棧記憶體,這樣就相當於程式設計師「不使用中間變數」了。中間返回的值通過暫存器自動儲存,最後一次返回時拷貝到int中去。 c/c++中也有臨時物件的概念,都是程式在執行過程中由編譯器在棧中自動申請的物件,對程式設計師不可見,也相當於「不使用中間變數」

另外乙個不申請任何變數的典型題目是:反轉字串

這種問題都是利用常量,或者將變數的申請交給編譯器在遞迴過程中自動在棧中申請,也就是借刀殺人了。

無**,無真相;簡單的原始碼如下:

#include #include 

#include

int mystrlen(const

char *str);

int mystrlen1(const

char *str);

int mystrlen2(const

char *str);

intmain()

int mystrlen(const

char *str) /*

不用中間變數,用遞迴實現,很容易看懂

*/

else

}int mystrlen1(const

char *str) /*

不用中間變數,也是用遞迴實現,寫得更簡潔而已

*/int mystrlen2(const

char *str) /*

使用了乙個int型變數

*/

return

len;

}

C語言 實現strlen函式

首先要明確strlen函式的意義 strlen所從事的是乙個計數器的工作,它是用來計算字串的長度。它可以從字串的任意位置開始計數,直至碰到字串末尾的 0 結束計數工作。第一種方式 設定乙個計數器count,從字串開始計數,直至碰到字串末尾的 0 結束計數工作。int my strlen const ...

c語言 遞迴實現strlen 函式

不使用任何系統函式編寫strlen 函式 遞迴實現strlen函式 include 不使用任何系統函式編寫strlen 函式 遞迴實現strlen函式 int my strlen const char strdest void main 確定函式傳遞過來的位址上的記憶體儲存的是否是 0 如果是 表明...

C語言strlen 函式

strlen 函式 該函式從第乙個字元開始計算字串中字元數,直到遇到空字元即 0 為止,然後返回計算字元數的長度,包括 0 以下是strlen 函式 如下 include include int main void 列印結果 分析 helloworld 0 hi共計13個字元,然而列印出來的結果卻只...