字符串(strlen)

【1】求字符串长度函数如何实现?

(1)第一种实现思想:遍历并计数

方法简述:循环遍历每个元素,直至遇到"\0",计数统计。也是最常用的方法,属于惯性思维。

示例代码如下:

 1 /*
 2  * for循环
 3  */
 4 int strlen1(const char *str)
 5 {
 6     int Length = 0;
 7     if (NULL != str)
 8     {
 9         for ( ;*str++ != '\0';Length += 1);
10         return Length;
11     }
12     return Length;
13 }
14 
15 /*
16  * while循环
17  */
18 int strlen2(const char *str)
19 {
20     int len = 0;
21     if (NULL != str)
22     {
23         while (*str++ != '\0')
24         {
25             len++;
26         }
27         return len;
28     }
29     return len;
30 }

(2)第二种实现思想:指针作差运算  

方法简述:用最后“\0”的下一个字符指针值减去第一个指针值,再减去“\0”的一个空间

示例代码如下:

 1 int strlen3(const char *src)
 2 {
 3     if (NULL == src)
 4     {
 5         return 0;
 6     }
 7     const char *temp = src;
 8     while (*src++ != '\0');    // 本循环结束时,src已经指向了“\0”的下一个字符
 9     return (src - temp - 1);   // 因此这里必须再减1
10 }

(3)第三种实现思想:递归实现  

方法简述:如果遇不到结束符“\0”,我们就义无反顾的追下去......

示例代码如下:

 1 int strlen4(const char *str)
 2 {
 3     if ('\0' == *str)
 4         return  0;   
 5     else 
 6         return  1 + strlen4(str +1);                   //标准递归
 7 }
 8 
 9 int strlen5(const char *str)
10 {
11     return *str =='\0' ? 0 : 1 + strlen5(str + 1);     //三目运算符实现方式
12 }

不断在进步.......

 

posted @ 2012-12-31 17:07  kaizenly  阅读(774)  评论(0编辑  收藏  举报
打赏