模拟实现库函数strlen
strlen函数是包含在string.h头文件中的计算字符串长度的函数
查阅资料可知strlen函数的返回值为字符串长度,且结束标志是\0
计数器计数法
我们可以创建临时变量来记录字符串中字符的个数,字符指针每向后偏移一次,计数器cnt就自增一,最后返回cnt的值
int my_strlen(const char* str)//求字符串长度并不需要改
//变原有字符串的内容,所以加const修饰,使代码更健壮
{
int cnt = 0;//创建临时变量cnt
while (*str != '\0')//当str指向的空间不是\0时指针向后偏移,计数器加一
{
cnt++;
str++;
}
return cnt;//返回计数器的值
}
不创建临时变量的递归函数法
第二种方法是采用递归的方法,特点是不需要创建其他变量;
思路和第一种方法类似,都是使用指针偏移的方法
递归结束条件是 当字符指针指向\0时也就是字符串末尾时;
只要理解了递归的“大事化小”思想,还是很好理解
int my_strlen(const char* str)//const含义和第一种相同
{
if (*str == '\0')//当字符指针指向字符串最后时开始“归”
return 0;
else
return 1 + my_strlen(str + 1);//字符指针没有指向字符串末尾时
//每次“递”都使指针向后偏移一位,使结果+1
}
指针-指针
理解这个方法需要知道指针-指针=之间的元素个数
先将字符串首元素地址记录下来,然后再找到\0所在的地址
指针和指针相减就得到了元素个数,也就是字符串的长度
int my_strlen(char* str)
{
char* p = str;//记录字符串初始位置的地址
while (*str != '\0')//将指针偏移到\0所在的位置
{
str++;
}
return str - p;//返回指针-指针的值
}