題目要求
算法
strlen函數功能是計算字符串中字符的個數.(除\0外)
而字符串本身就是一個字符數組,只不過末尾以\0結束.
因此,我們只需遍歷除\0之外的所有字符即可.
有三種方法可以解決這個問題.
算法總結
方法一:設置一個整型計數器,遍歷字符串.
方法二:通過不斷函數自身的遞歸.
方法三:與方法一類似,設置一個char*變量標記字符串尾部,通過指針相減得到字符長度.
核心代碼
//方法一:通過設置整型計數器,模擬實現strlen函數.
int my_strlen1(const char *str){
assert(str);
int count = 0;
while(*str++){
count++;
}
return count;
}
//方法二:通過遞歸,模擬實現strlen函數
int my_strlen2(const char *str){
assert(str);
if(*str){
return (1+my_strlen2(str+1));
}
return 0;
}
//方法三:通過char*變量,模擬實現strlen函數
int my_strlen3(const char *str){
const char *end = str;
assert(str);
while(*end++){
;
}
return (end-str-1);
}
完整測試代碼
/*
*本代碼版權歸高小調博客所有
*作者:行不更名,坐不改姓的博主高小調
*日期:2015-7-31
*代碼功能:三種方式模擬實現strlen函數
*搜集整理:高小調博客-(http://gaoxiaodiao.com)
*/
#include
#include
//方法一:通過設置整型計數器,模擬實現strlen函數.
int my_strlen1(const char *str){
assert(str);
int count = 0;
while(*str++){
count++;
}
return count;
}
//方法二:通過遞歸,模擬實現strlen函數
int my_strlen2(const char *str){
assert(str);
if(*str){
return (1+my_strlen2(str+1));
}
return 0;
}
//方法三:通過char*變量,模擬實現strlen函數
//(庫函數中的strlen函數就是這么干的)
int my_strlen3(const char *str){
const char *end = str;
assert(str);
while(*end++){
;
}
return (end-str-1);
}
int main(){
char str[]="abcdef";
printf("str長度是:%d\n",my_strlen1(str));
printf("str長度是:%d\n",my_strlen2(str));
printf("str長度是:%d\n",my_strlen3(str));
return 0;
}
輸出

