这是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的三种模拟实现,如有错误请指正,谢谢观看