【c语言编】模拟strlen函数的实现

我们要想实现strlen函数,首先呢我们得先了解什么是strlen函数,作用是什么,其实很简单,srtlen是c语言中的一个库函数,是求字符串的长度的,就相当计数器一样

strlen() 函数是从字符串的开头位置依次向后计数,直到遇见\0,然后返回计时器的值。最终统计的字符串长度不包括\0。用这个函数要引用头文件:string.h   如图

【c语言编】模拟strlen函数的实现_第1张图片

我们看下代码怎么实现,如下

【c语言编】模拟strlen函数的实现_第2张图片

我可以看出来lirunkun长度就是8

我们大概知道strlen函数的原理,那接下来可以模拟下strlen函数的怎么实现,这里讲三种方法实现strlen函数

  • 第一种:计数器方式

就是首先呢我创建个字符串,从第一个开始算起,创一个count变量来记录字符串的个数,记录一个我们让字符串++,直到找到'\0',看代码如何实现:

#include
int  my_strlen(char* str)
{
	int count = 0;//计数器
	while (*str++)//找到'\0'跳出循环
	{
		//条件满足就+1
		count++;
	}
	return count;
}
int main()
{
	char arr[] = "lirunkun";
	int len = my_strlen(arr);//自定义实现strlen函数
	printf("%d", len);
	return 0;
}

  • 第二种:梯归方法

这里简单讲下什么是梯归,就是自己调用自己,但一定要有限制条件,不然会死循环

我们知道找到'\0'就返回,那我判断条件也就是让它不等于'\0',如果等于'\0',就返回

#include
int my_strlen(char* str)
{
	if (*str=='\0')//等于'\0',就后往向前返回
	{
		return 0;
	}
	else
	{
		return 1 + my_strlen(str + 1);\\每执行一次,指向下一个字符
	}
}
int main()
{
	char arr[] = "lirunkun";
	int len=my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

梯归函数是1+my_strlen(str+1)

  • 第三种:指针-指针

简单了解下指针-指针什么意思呢,就当两个指针都指向同一个数组中的元素时,才允许从一个指针减去连一个指针。它是一种有符号整数类型。减法运算的值是两个指针在内存中的距离(该距离以间隔的单元格数为单位,而不是以字节为单位)。好比就是arr[0]-arr[7]就是它们之间的元素个数,如图

【c语言编】模拟strlen函数的实现_第3张图片

 

#include
int my_strlen(char* str)
{
	char* p = str;/记录首素地址
	while (*p!='\0')
	{
		p++;
	}
	return p - str;
}
int main()
{
	char arr[] = "lirunkun";
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

如有兴趣可以下来模拟实现下,886


 

你可能感兴趣的:(c语言,开发语言,编辑器)