字符串函数strlen三种实现方法

目录

一、计算器法

二、 递归法

三、 指针相减法


一、计算器法

一串字符的结束标志是‘\0’,因此我们从字符串首元素不断向后累加查看是否到达碰到‘\0’若遇到则停止,我们运用while循环将条件设置为指向字符串元素的指针,且‘\0’的ASCII码值为0,所以指针指向‘\0’时循环停止,期间在判断是否为‘\0’时拿一个变量计数,当while循环停下来时计数也停止。代码如下:

int my_strlen1(const char* pa)
{
	//计算器法
	assert(*pa);
	int n = 0;
	while (*pa++)
	{
		n++;
	}
	return n;
}
int main()
{
	char all[] = "abcdef";
	printf("%d\n", my_strlen1(all));
	return 0;
}

二、 递归法

我们仍然使用终止条件为‘\0’,在每次退出递归时我们就返回+1,这样就可以知道程序进行了多少次递归,当然在遇到‘\0’时返回0。

如图:

代码如下: 

int my_strlen2(const char* pa)
{
	//递归法
	if (*pa)
		return 1 + my_strlen2(pa + 1);
	else
		return 0;
}

int main()
{
	char all[] = "abcdef";
	printf("%d\n", my_strlen2(all));
	return 0;
}

注意:递归法虽然简化了代码量,但是有时候会导致一个本可以简便计算的公式变得使用更大的内存计算,例如:斐波那契数列的计算,若用递归法,计算到后面会导致计算过多而出现堆栈溢出。所以不是所有方法都适合递归,使用需谨慎。


三、 指针相减法

运用指针减指针可以得到中间元素个数的性质可以求出字符串长度,我们保存起始指针的地址,然后不断让指针向后移动至‘\0’处停下来,在让该末尾指针减去起始指针即可以得出字符串中的元素个数。

代码如下:

int my_strlen3(const char* pa)
{
	//指针相减
	char* p = pa;
	while (*pa)
	{
		pa++;
	}
	return pa - p;
}
int main()
{
	char all[] = "abcdef";
	printf("%d\n", my_strlen3(all));
	return 0;
}

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值