> 文档中心 > strlen库函数求字符串的长度和三种模拟实现方法

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


前言:对于strlen库函数的使用相信大家都很熟悉了,是用来求字符串的长度,遇到'\0'终止;所需头文件是;这一期,来讲解一下它的使用和strlen库函数的模拟实现!

目录

1.strlen库函数的使用

三种模式实现方法通用思想解析:

2.方法1:计数器法

2.1.1方法:

2.1.2具体代码:

2.1.3代码分析:

2.方法2:函数递归

2.2.1方法:

2.2.2具体代码实现:

2.2.3代码分析:

2.方法3:指针-指针法

2.3.1方法:

2.3.2具体代码:

2.3.3代码分析:

总结:

1.strlen库函数的使用

这里就不多说了,直接上代码:

值得注意的是:strlen的返回值是无符号整型,这点可能会考我们用来比较大小!!!

三种模式实现方法通用思想解析:

    根据strlen遇到 '\0'就结束的特性,我们模拟时,就可以以这个条件作为循环终止条件,传过去首元素的地址,利用指针接收,让指针不断++;直到解应用遇到'\0';结束循环。

2.方法1:计数器法

2.1.1方法:

    定义一个计数器变量(暂定为count);每循环一次,就让count++,指针(暂定为str)str++;直到遇到'\0'循环结束,打印count的值,就是字符串的长度!!!

2.1.2具体代码:

 2.1.3代码分析:

    我们封装成函数的形式,最后返回count的值就可以啦,然后在打印,因为我们一般是不在封装的函数里打印数据的。当然这个代码严格来写,我们还可以写更严谨一点,比如:加上断言assert;防止传过来的是空指针;也可以在指针前面加上const修饰;因为我们并不改变字符串的内容,只是求它的长度!!!

2.方法2:函数递归法

2.2.1方法:

    函数递归就是一个函数在它的函数体内调用它自身;你也可以理解为:一个递归函数的调用过程类似于多个函数的嵌套的调用,只不过调用函数和被调用函数是同一个函数。并且函数递归一定要有两个必要条件:

  1.存在限制条件,当满足这个限制条件的时候,递归便不再继续;
  2.每次递归调用之后越来越接近这个限制条件;

并且函数递归的思想是:大事化小!!

那么怎么大事化小呢?比如字符串abcd我们怎么操作? 

2.2.2具体代码实现:

2.2.3代码分析:

    当没遇到'\0';就返回1+my_strlen(str+1);我们长度每增加1次;就让指针往后移一位;直到遇到'\0';我们就返回0;所以假如有字符串abcd最终就会转化为====>1+1+1+1+0;下面对于这个递归过程我们用画图的形式来做一个剖析,毕竟使用递归还有一个回朔的过程;为了方便,我们暂且就用abc三个字符串来演示吧:

注意:使用函数递归,并不是每次递归都打印一个值,而是等递归终止过后,回朔打印的!!!

2.方法3:指针-指针法

2.3.1方法:

    这就需要我们明白指针-指针是什么呢?当然是它们中间有多少个数据啦,也就是个数了;

所以我们可以在定义一个指针(暂定为end),让end指针=初始指针str;每当循环往后走,我们不在用计数器count++;而是让指针end++;最终end指针-str指针就是中间元素的个数了!!!

2.3.2具体代码:

2.3.3代码分析:

     我们一定要弄明白指针-指针的含义====》得到的是一个数;为什么是一个说呢?因为指针代表着地址;地址在内存中是二进制表示的形式;地址-地址当然是一个数啦;所以我们用int型来接收。

总结:

     以上就是strlen函数的实现和三种模拟实现方法;在这里我们还要弄清楚strlen和sizeof的区别;strlen是求字符串的大小,遇到'\0',就会终止;sizeof一般是求整型的大小;你用sizeof求字符串大小也是可以的,不过它会比strlen求的长度大1;为什么会大1?因为它会把'\0'也算上。有错误欢迎指出,一起加油啊!!!