文章目录
- 前言
- 一、strlen的模拟实现
- 二、模拟实现代码及思路
- 2.1 计数法
- 2.2 指针相减法
- 三、递归计数法
- 总结
前言
我写这篇文章的目的主要是帮助理解C语言中重要函数的用法,后面也会总结C++相关的函数的模拟实现,这里的算法不一定是最好的,因为只是我个人的思路,根据函数的功能来实现的,所以大家可以参考一下。
一、strlen的模拟实现
我们先把strlen模拟实现了吧,这个比较简单同时比较基础,首先我们要明白,strlen的用法:
计算字符串的长度(这里的长度就是字符的个数不算‘\0’)
模拟实现这个函数之前我们先到C语言官网去找到这个函数,直接搜这个函数就可以
看完上面那些,我们就大概知道strlen
怎么使用了
二、模拟实现代码及思路
分为三个方法,这里不会评价代码的优劣,旨在深度熟悉函数strlen
我们可以先建立一个项目,建立好源文件(这里用 VS2022 社区版 进行演示,其他IDE大同小异)
2.1 计数法
因为是计算C语言字符串的长度,所以先要有字符串,至于怎么创建字符串,看个人习惯了,我喜欢直接写,有的人可能喜欢大括号那种,大同小异。
接下来我们需要一个函数size_t my_Strlen ( const char * str )
,这里可以直接复制过来改一下函数名字。并且调用它尽管我们还没有实现内部,但是我习惯先写下来size_t
是无符号整型打印时候需要使用占位符%zd %zu
都可以,我习惯上使用%zd
,如果不使用这两个可能会有警告。
接下来就要实现函数的核心部分,计数法顾名思义就是一个一个数,这里需要一个工具我们通常会定义一个变量count
来计数,然后原理就是用一个循环,让指针不断移动直到碰到\0
,在这期间指针每移动一次count
就++一次,我这里用的while循环,最后返回这个统计的数。
运行一下可以看出正常算出了我们字符串的长度。
2.2 指针相减法
顾名思义这里需要两个指针,一个指针指向头,另一个指针去找\0
,找到后指针相减,返回相减的结果就是字符串的长度了
三、递归计数法
递归计数法的原理也是要找那个\0
,然后将递归次数加起来,就是字符串的长度了
上面图片上详细的画出了递归的操作
总结
通过上面三种方法的模拟实现,我们可以更加深入理解strlen的用法了,如果你有问题可以评论或者私信我。