代码实现
#include <iostream>
#include <cstring>
using namespace std;
/**
* @brief myStrLen
* @param str
* @return str's length
*/
unsigned int myStrLen(char str[])
{
int len = 0;
for( ; *str; ++str) {
++len;
}
return len;
}
/**
* @brief myStrLen1
* @param str
* @return str's length
*/
unsigned int myStrLen1(char str[])
{
int len = 0;
while(*str) {
++len;
++str;
}
return len;
}
/**
* @brief myStrLen2
* @param str
* @return str's length
*/
unsigned int myStrLen2(char str[])
{
return *str ? myStrLen2(++str)+1 : 0;
}
int main()
{
char str[] = "I Love cpp";
cout<<"----------------------------------------"<<endl;
//strlen 不含'\0'
cout<<"str's length is: "<<strlen(str)<<"(c lib function)"<<endl;
cout<<"str's length is: "<<myStrLen(str)<<"(for loop version)"<<endl;
cout<<"str's length is: "<<myStrLen1(str)<<"(while loop version)"<<endl;
cout<<"str's length is: "<<myStrLen2(str)<<"(recursive version)"<<endl;
cout<<"----------------------------------------"<<endl;
cout<<"sizeof str is:"<<sizeof(str)<<endl; //sizeof 包含'\0'
cout<<"----------------------------------------"<<endl;
return 0;
}
运行结果
代码解析
myStrLen()和myStrLen1()实现原理一样,都是通过循环移动字符指针,同时自增长度变量(len)直到遇到 '\0' 为止。myStrLen2()则是通过采用递归的方法,递归结束的条件是遇到字段串的结束符 '\0'。