求字符串长度strlen函数的三种模拟实现

这是cplusplus官网的strlen介绍

我们可以看到 其参数类型是一个const修饰的字符指针类型 返回类型为size_t  功能是得到字符串长度,返回值是C语言字符串长度 接下来我们试着模拟实现一下

一、计数法(最容易想到)

对于字符串,其以‘\0'为结束标志,利用这一点,我们可以设置循环求字符串长度

此处正好用到我们前面学的的assert断言来使代码更加健全

二、指针-指针

我们已经学习了指针的基础知识,那么能不能试着用指针的方法来解决这个问题呢

我们观察发现对于strlen官方给出的参数是一个指针变量,那么我们传入的肯定是开始时的地址,如果我们能知道字符串结束标志’\0'的地址,那么利用我们前面学过的指针运算能不能解决呢

————当然可以

来看第二种方法

结果同样正确,这种方法与计数法类似,只是使用了指针来解决而已

三、递推法

递推法就是要寻找当前条件与下一层结果的联系。对于求长度的strlen,我们就从长度出发

首先如果首元素是‘\0'的话直接就结束,长度就是个0

那么如果是一段完整的字符串呢,可以这样理解,这个字符串是由一个一个的字符拼接成的,那么我们现在有了第一个字符的地址,说明他的长度至少为1,那么再判断下一个字符是不是结束标志'\0',如果不是,说明长度至少为2,再判断下一个字符 这样,关系就出来了

注意 return 1 + len3(str+1)中的str+1不能替换为str++  否则当最后一轮递推完后,str指向的范围会超出字符串的范围 变成野指针。

以上是我目前学到的有关strlen的三种模拟实现,如有错误请指正,谢谢观看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值