C语言之strlen函数的几种实现方法
Vivian 2018-06-19 来源 : 阅读 1099 评论 0

摘要:本文主要向大家介绍了C语言的strlen函数的几种实现方法,通过具体的代码向大家展示,希望对大家学习C语言有所帮助。

    本文主要向大家介绍了C语言的strlen函数的几种实现方法,通过具体的代码向大家展示,希望对大家学习C语言有所帮助。     

    strlen函数是用来计算字符串长度的一个函数,其包含在string.h头文件中。

    例如:假设一个字符串为“abcdef”,在经过strlen函数计算后应该为6。

[cpp] view plain copy
1. #include   
2. #include   
3. int main()  
4. {  
5.     int ret = 0;  
6.     char arr[] = "abcdef";  
7.         ret = strlen(arr);  
8.     printf("%d\n",ret);  
9.     return 0;  
10. }

C语言之strlen函数的几种实现方法

      那么,这个函数是具体如何实现的呢?我们可不可以编写一个具有计算字符串长度的函数呢?

方式1:

     使用while循环逐一判断,再用创建一个变量count来计数,直到遇到"\0"退出循环。

[cpp] view plain copy
1. int my_strlen(const char* arr)   //不需要改变字符串的值,故用const修饰,提高函数安全性  
2. {  
3.     int count = 0;  
4.     while(*arr)  
5.     {  
6.         count++;  
7.         arr++;  
8.     }  
9.     return count;  
10. }

方式2:

     运用递归的思想,从前向后逐字符判断,若此字符不为“\0”,则返回下一个递归函数,直到遇到字符“\0”结束递归。

[cpp] view plain copy
1. int my_strlen(const char* arr)  
2. {  
3.     if(*arr)  
4.         return 0;  
5.     else  
6.         return 1+my_strlen(arr+1);  
7. }

 


方式3:

     运用指针的减法来判断(注:减法运算的值是两个指针在内存中的距离,以数组元素的长度为单位,例如指针p1指向arr[i],指针p2指向arr[j],则p2-p1就是j-i的值,即也就是间隔之间的元素个数。)

 

[cpp] view plain copy
1. int my_strlen(const char* arr)  
2. {  
3.     char *p = arr;  //定义一个指针存放字符串首元素的地址  
4.     while(*p != '\0')  
5.         p++;  
6.     return p-arr;  
7. }

 


最后,我们也可以看看在库函数中它是如何实现的(用的平台为VS2008)

 

[cpp] view plain copy
1. size_t __cdecl strlen (  
2.         const char * str  
3.         )  
4. {  
5.         const char *eos = str;  
6.   
7.         while( *eos++ ) ;  
8.   
9.         return( eos - str - 1 );  
10. }

    可以看出,它用的是指针的减法运算来计算字符串长度,由于它在循环中使用自增,到最后为“\0”时,多加1次,因此最后返回时减去1。

 

    strlen函数是用来计算字符串长度的一个函数,其包含在string.h头文件中。

    例如:假设一个字符串为“abcdef”,在经过strlen函数计算后应该为6。

    本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @Vivian 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程