【C语言】模拟实现库函数strlen

80 阅读2分钟

模拟实现库函数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;//返回指针-指针的值
}