題目要求
算法
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; }