【C语言系列】—三种方法模拟实现strlen库函数的方法

꧁   各位大佬们好!很荣幸能够得到您的访问,让我们一起在编程道路上任重道远!꧂

☙ 博客专栏:【C生万物】

⛅ 本篇内容简介:详细介绍如何使用三种方法模拟实现库函数 strlen()!

⭐ 了解作者:励志成为一名编程大牛的学子,目前正在升大二的编程小白。

励志术语:编程道路的乏味,让我们一起学习变得有趣!

✂   正文开始


文章目录

strlen的介绍以及功能

 strlen的一般用法

计数器法模拟实现strlen

指针 - 指针的方法模拟实现strlen

 递归方法模拟实现strlen


strlen的介绍以及功能

关于strlen的功能我们来看MSDN或者Cpulspuls(https://cplusplus.com/)怎么介绍的,这里我用的是MSDN。

 strlen的一般用法

strlen可以求字符串的长度,即 \0 前字符的个数,看下面这个代码:

#include<stdio.h>
#include<string.h>
int main()
{
	//char arr[] = "abcdef";//常量字符串 arr中存 a b c d e f \0
	int len = strlen(arr);//  strlen的返回值是size_t == unsigned int
	printf("%d\n", len);
	return 0;
}

运行结果:

可以得到求出的长度为 6。

计数器法模拟实现strlen

要点:在函数中定义一个计算 \0 之前字符出现的个数,最后返回计数器计算的个数。

#include<stdio.h>
#include<assert.h>
size_t my_strlen(char* ps)
{
	assert(ps);//断言这个指针
	size_t count = 0;//计算个数
	while (*ps)
	{
		count++;
		ps++;
	}
	return count;
}

//模拟实现返回值为 size_t 类型的strlen
int main()
{
	char arr[] = "abcdef";
	size_t len = my_strlen(arr);
	printf("%u\n", len);
	return 0;
}

指针 - 指针的方法模拟实现strlen

我们知道数组的地址是由低到高的,我们可以用地址的最高位减去地址的最低位,最后再返回就可以得到到这个字符的长度了。

我们来画个图:

思路理清了,就上代码:

#include<stdio.h>
#include<assert.h>
size_t my_strlen(char* src)
{
	assert(src);//断言这个指针
	char* dest = src;
	while (*dest != '\0')
	{
		dest++;
	}
	return dest - src;
	
}

//模拟实现返回值为 size_t 类型的strlen
int main()
{
	char arr[] = "abcdef";
	size_t len = my_strlen(arr);
	printf("%u\n", len);
	return 0;
}

 递归方法模拟实现strlen

递归的方法就比较简单了,我们直接上代码吧。

#include<stdio.h>
#include<assert.h>
size_t my_strlen(char* p)
{
	assert(p);//断言这个指针
	if (*p == '\0')
	{
		return 0;
	}
	else
	{
		return 1 + my_strlen(p + 1);
	}

}

//模拟实现返回值为 size_t 类型的strlen
int main()
{
	char arr[] = "abcdef";
	size_t len = my_strlen(arr);
	printf("%u\n", len);
	return 0;
}

OK! 把三种模拟实现strlen的方法,都分享给大家,你会哪几种呢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甘宸しぐれ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值