2013-07-05 11:36:05
小结:
本函数给出了几种strlen的实现,有ugly implementation,也有good implementation。并参考标准库中的implementation,最后给出了比较好的implementation。
求字符串长度,可通过两种方式实现:
- 是在遍历字符串中字符的时候用一个计数器记录字符个数,如下面函数_strlen_1中所示;
- 可用指向字符串截尾的指针减去指向字符串开始的指针得到,这种方式写出的代码更加简洁,也是库函数采用的实现方式,如函数_strlen_2、_strlen_3、_strlen_4中采用的方式。
标准库函数并没有输入合法性检查,这将输入合法性检查的任务推给了函数的调用者。
对于strlen函数,好的implementation要考虑一下几点:
- 函数参数应为const;
- 返回值应为unsigned int;
- 注意输入合法性检查。
代码:
1 #include <iostream> 2 3 using namespace std; 4 #define SIZE 100 5 6 /*** 7 *strlen - return the length of a null-terminated string 8 * 9 *Purpose: 10 * Finds the length in bytes of the given string, not including 11 * the final null character. 12 * 13 *Entry: 14 * const char * str - string whose length is to be computed 15 * 16 *Exit: 17 * length of the string "str", exclusive of the final null byte 18 * 19 *Exceptions: 20 * 21 *******************************************************************************/ 22 23 //不好的implementation 24 //返回值应该用unsigned int或直接size_t,不应用int 25 int _strlen_1(const char *str) //参数要用const,防止改动 26 { 27 if (NULL == str) 28 { 29 return 0; 30 } 31 32 int len = 0; 33 while (*str++ != '