strlen函数的模拟实现

前言

        strlen()是C语言重要的库函数之一,主要功能是求字符串长度。strlen函数统计的是从参数提供的地址开始,'\0'之前字符串中的字符个数(包括空白字符)。


 strlen的模拟实现

通过strlen的工作原理可以知道,想要模拟实现strlen函数就要有一个地址(起点)和'\0'(终点),如果没有起点函数无从下手,如果没有终点,函数可能越界访问,故而二者缺一不可。


方法一数组传参

        数组传参传递的是数组首元素的地址,因此在被调函数中与主调函数使用的是同一个数组,也是同一块空间。通过数组传参的方式能轻松访问到该数组的内容。

int my_strlen(char arr[])
{
	int i = 0;
	int count = 0;//记录字符个数
	while (arr[i] != '\0')//利用数组方式遍历元素,终点为'\0'
	{
		i++;
		count++;
	}
	return count;
}

方法二 指针相减

        当两个指针指向同一块空间时,两指针之差的绝对值即为二者间的元素个数。这句话相当重要,务必牢记,前提条件是两个指针指向同一块空间(即同一个数组)。利用该条件,可以通过首元素与'\0'的地址差值得到二者之间元素个数

int my_strlen(char* pa)
{
	char* p = pa;
	while (*p != '\0')//通过循环得到'\0'的地址
		p++;
	return p - pa;
}

方法三函数递归

char arr[] = { "abcdef " };

        如上,如果要得到arr数组的字符个数,我们可以将数组拆为'a' + "bcdef",其中a的地址为arr,b的地址为arr + 1...以此类推,将arr数组拆到'\0'为止。也就是说可以把函数写为递归的形式,参数为首元素地址,结束标志为'\0',代码如下

int my_strlen(char* p)
{
	if (*p == '\0')
		return 0;
	else
		return 1 + my_strlen(p + 1);
}
  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值