三種方法實現strlen函式
阿新 • • 發佈:2018-11-10
我們知道,strlen函式是計算字串長度的函式,那麼要實現strlen函式主要就是得到字串長度,那麼 怎樣才能得到字串長度呢?如果是整形的陣列,我們可以通過下標來尋找,可是這是字串,我們就要了解字串了。
這裡定義一個字串 char *str = "abcdef";這裡我們可以看到字串裡有'a','b','c','d','e','f',其實字串後還有一個'\0',用來表示字串的結束,當字串中出現'\0'時,標誌這個字串結束。我們可以由此入手,將字元逐個與'\0'比較,若相等,表示字串結束,計算前幾個字元的數量即可,所以此處核心就是尋找'\0'。下面給出兩種方法的程式碼:
1.非遞迴
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> int my_strlen(char *str) { int count = 0; while('\0' != *str) { count++; str++; } return count; } int main() { char *str = "abcdef"; int len = my_strlen(str); printf("%d\n", len); system("pause"); return 0; }
2.遞迴
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> int my_strlen(char *str) { if ('\0' == *str) return 0; else return 1 + (my_strlen(str + 1)); } int main() { char *str = "abcdef"; int len = my_strlen(str); printf("%d\n", len); system("pause"); return 0; }
3.指標相減
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int my_strlen(char *str)
{
char *start = str;
while ('\0' != *str)
{
str++;
}
return str - start;
}
int main()
{
char *str = "abcdef";
int len = my_strlen(str);
printf("%d\n", len);
system("pause");
return 0;
}
結果演示: