首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >strlen函数及其模拟实现(C语言)

strlen函数及其模拟实现(C语言)

作者头像
埋头编程
发布2024-10-16 17:17:35
发布2024-10-16 17:17:35
6470
举报
文章被收录于专栏:C/C++C/C++

1.前言

在现实生活场景中,字符乃至字符串出现的形式占大多数。比如,整天数着自己小金库里钱的数目本质上也是一种符号(数学符号),在5月20号那天说出的“5201314”也是以一种符号,等等。

那回到编程的视角中,程序员编程就是为了能够解决生活中的出现问题。如果字符和字符串出现的如此频繁,那么程序员难免要操作和处理一些字符和字符串。(在本文中,我只介绍字符串函数的一小部分)

不过不用担心,C语言在string.h这个头文件中为我们能实现了很多操作和处理字符串的函数,而在本文中,就讲解其中较为常用的一个——strlen函数

让我们开启学习之路,通往那编程辉煌的殿堂吧!🥇🥇🥇

2. 介绍strlen函数

2.1 strlen函数的作用

在前言我讲过,这是一个操作和处理字符串的函数,那么它能够生效的对象就只有字符串了,别的数据类型都不可以。(这个点是很多初学者容易犯过错误的点)。

strlen函数的功能:统计字符串中字符的个数,但不包括‘\0’。(注意:‘\0’是不算在统计个数中的,这个点也是很多人都会忽略的)

2.2 strlen函数的原型

strlen函数的原型
strlen函数的原型
代码语言:javascript
复制
//strlen函数的原型
size_t strlen(const char* str)

从这个原型中,我们可以看出一些端倪。strlen函数的返回值是一个正整数,还有它的形参str是个const char*类型的变量。

可能有的读者,对这个str的变量类型有些困惑,这里我就为你解答一下: 首先,这是一个统计字符串的函数,仅仅只有统计字符串中字符的个数,不具备修改字符串内容的能力; 其次,既然我们不想修改自负床的内容,还要让这个变量接收到字符串的首地址,那么const char*这个类型就完美符合我们的要求。 希望读者们能够理解。❤️

3. strlen函数实操演练

上面接了这么多的知识了,是时候该实践出真知了。

下面是strlen函数实际使用时的代码及其运行的结果:

实例
实例

相信大家看完这个案例后,内心就不会觉得strlen函数有多难用了。其实用这个函数时,需要注意的是包含一下string.h这个头文件即可。其他的就没什么难点了!

4. strlen函数的模拟实现

对于strlen函数的模拟实现,我将会介绍三种方法,希望读者们能够消化。👍

方法一:计数器法 先上代码,再讲思路

代码语言:javascript
复制
#include<stdio.h>
int my_strlen(char *str)
{
	int conut = 0;
	while(*str++ != '\0')
	{
		count++;
	}
	return count;
}
int main()
{
	char arr[] = "I love learning C!";
	int ret = my_strlen(arr);
	printf("%d\n",ret);
	return 0;
}
模拟实现
模拟实现

这里主要是分析作者写的my_strlen函数:

首先根据需求,我们要得到字符串中字符的个数,那返回值必定是一个整型。另外我们是要对字符串进行操作的,为此传给函数的字符数组,我们得设置一个字符指针来接收。为此,就有下面的代码产生 int my_strlen(char* str) 之后,就得分析函数体里面的内容了。我们都知道,字符串是以’\0’结尾的,根据这个特点我们就可以用一个while循环,循环到str指针指向’\0’之后退出循环,并且每进入一次循环体,就证明了指针指向了一个有效的数据,那么count就自增1。

如果你理解我说的话,那就太好了!接下来,讲解第二种做法。

方法二:指针 - 指针 老规矩先上代码:

代码语言:javascript
复制
#include<stdio.h>
int my_strlen(char *str)
{
	char* start = str;
	while(*str)
	{
		str++;
	}
	return str - start;
}
int main()
{
	char arr[] = "I love learning C!";
	int ret = my_strlen(arr);
	printf("%d\n",ret);
	return 0;
}
方法二
方法二

这里的解释画幅图就明白了。

图解
图解

方法三:递归

代码语言:javascript
复制
#include<stdio.h>
int my_strlen(char *str)
{
	if(*str == '\0')
	{
		return 0;
	}
	return 1 + my_strlen(str + 1);
}
int main()
{
	char arr[] = "I love learning C!";
	int ret = my_strlen(arr);
	printf("%d\n",ret);
	return 0;
}
方法三
方法三

这个方式也是画个图你就理解了,

图解
图解

就是把未拆分出来的字符作为一个整体,拆出来的字符就+1。

5. 总结

本文,主要的目的是要读者能够熟悉strlen函数的使用,以及当我们遇到一个陌生的函数时,如何对函数进行分析的思路。

如果你还有什么不了解的地方,欢迎在评论区提问,我会回复的!

最后,送给大家一句话。学习很难,但坚持一定很酷!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.前言
  • 2. 介绍strlen函数
    • 2.1 strlen函数的作用
    • 2.2 strlen函数的原型
  • 3. strlen函数实操演练
  • 4. strlen函数的模拟实现
  • 5. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档