1 #include <stdio.h>
2 #include <assert.h>
3
4
5 /*
6 *实现strlen函数
7 * */
8 size_t my_strlen1(const char *src)
9 {
10 int i = 0;
11 assert(src);
12
13 while(*src != ' ')
14 {
15 src++;
16 i++;
17 }
18 return i;
19 }
20
21 /*
22 *不使用全局与局部变量实现
23 * 缺点:如果字符串过长,递归深度很深,函数调用的开销比循环大的多
24 * */
25 size_t my_strlen2(const char *src)
26 {
27 assert(src);
28 if(*src == ' ')
29 return 0;
30 return 1 + my_strlen2(src+1);
31 }
32
33 size_t my_strlen3(const char *src)
34 {
35 assert(src);
36
37 return (*src != 0)?(1 + my_strlen3(src+1)):0;
38 }
39
40 int main(int argc, char **argv)
41 {
42 char *p = "hello wrold";
43
44 printf("len:%dn", my_strlen1(p));
45 printf("len:%dn", my_strlen2(p));
46 printf("len:%dn", my_strlen3(p));
47 return 0;
48 }
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
strlen.c 39,0-1 底端
复制了 48 行