C語言中求字串長度的函式my_strlen()的幾種實現方法
阿新 • • 發佈:2018-12-21
C語言中求字串長度的函式的幾種實現方法
1.最常用的方法是建立一個計數器,判斷是否遇到‘\0’,不是’\0’指標就往後加一。
int my_strlen(const char *str)
{
assert(str != NULL);//此句判段str是否為空指標(事實上這條語句可以省略)
/*assert()其實是一個在<assert.h>中定義的巨集;
當assert後面括號內的表示式為真時,程式悄無聲息執行下一條;
為假時,宣判程式“死刑”*/
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
2.不建立計數器,從前向後遍歷一遍,沒有遇到‘\0’就讓指標向後加一,找到最後一個字元,記下來地址,然後用最後一個字元的地址減去起始地址,就得到了字串的長度。
int my_strlen(const char *str){
char *end = str;
assert(str!=NULL);
assert(end!=NULL);
while (*end != '\0')
{
end++;
}
return end - str;
}
3.不建立計數器,遞迴實現。
int my_strlen(const char *str)
{
assert(str != NULL);
if (*str == '\0')
{
return 0;
}
else
{
return (1 + my_strlen(++str));
}
}
也可以寫成這樣:
int my_strlen(const char *str){
assert(str != NULL);
return (*str == '\0') ? 0 : (my_strlen(++str) + 1);
}
或者這樣:
int my_strlen(const char *str){
assert(str != NULL);
return (*str == '\0') ? 0 : (my_strlen(str+1) + 1);
}
如果大家有更多方法,歡迎在下面評論。