目录
前言一.strlen函数的介绍1.strlen函数的声明2.strlen函数的简单运用3.注意事项二.三种实现strlen函数的方法1.计数器的方法2.递归方法3.指针-指针的方法前言
用C语言模拟实现strlen函数,我这里有三种方法,快来看看跟你用的方法是否是一样。
一.strlen函数的介绍
1.strlen函数的声明
size_t strlen ( const char * str );
这里函数的返回值为无符号整形(size_t),传入的是一个常量char*类型的指针。
2.strlen函数的简单运用
用strlen函数可以求出字符串的长度
#include#include int main() { char str[] = "qwerty"; int ret = strlen(str); printf("字符串的长度 = %d\n", ret); return 0; }
代码运行结果
3.注意事项
1.字符串是以"\0" 作为结束标志,strlen函数返回的是在字符串中 "\0" 前面出现的字符个数(不包含 "\0" )。
2.参数指向的字符串必须要以 "\0" 结束。
如果不是以"\0"结束,输出结果将是一个随机值,例如:
#include#include int main() { char str[] = { "a", "b", "c" };//这里没有以"\0"结束 int ret = strlen(str); printf("字符串的长度 = %d\n", ret); return 0; }
代码运行结果
其实这个代码的修改方法也很简单,例如:
方法1
#include#include int main() { char str[] = { "a", "b", "c", "\0"}; int ret = strlen(str); printf("字符串的长度 = %d\n", ret); return 0; }
方法2(如果一个数组没存满的话后面的值默认存0,而"\0"的ASCII码值就是0)
#include#include int main() { char str[5] = { "a", "b", "c"}; int ret = strlen(str); printf("字符串的长度 = %d\n", ret); return 0; }
代码运行结果
3.注意函数的返回值为size_t,是无符号的整形( 易错 )
#include#include int main() { if (strlen("abc") - strlen("abcdefg") > 0) { printf(">\n"); } else { printf("<=\n"); } return 0; }
运行结果
出现这个>符号的结果的原因就在于函数的返回值为size_t,是无符号的整形,两个无符号整形的数字相减得到的还是一个无符号整形,虽然这两个字符串长度相减得到的是-3,但是编译器会把他当成无符号的整形,把-3当成无符号整形将会是一个很大的正整数,所以输出的结果是>符号。(这是一个易错点)
二.三种实现strlen函数的方法
三个方法的共同点:
1.都要用const修饰指针,因为传址进来后只需要判断这字符串的长度,并不需要修改字符串的值,所以要用const修饰,这样使其更安全。
2.都要用assert断言,断言传来的指针不能为空指针,因为空指针是不能被访问的。
1.计数器的方法
这是最普通的方法,创建一个计数器变量,然后就开始找"\0",每经过一个字符,计数器就+1,直到找到"\0"为止。最后将计数器的值返回。
#include#include size_t my_strlen(const char* str) { assert(str != NULL);//判断传入的指针是否为空指针 int count = 0;//创建一个计数器变量,记录字符串的长度 while (*str) //当找到"\0"的时候循环结束 { count++;//记录字符串的长度 str++; } return count; } int main() { char str[] = "qwerty"; int ret = my_strlen(str); printf("%d", ret); return 0; }
2.递归方法
一时递归一时爽,一直递归一直爽。(讲解全在注释里面,嘻嘻)
#include#include size_t my_strlen(const char* str) { assert(str != NULL);//判断传入的指针是否为空指针 if (*str)//一直递归,直到找到"\0"为止 { str++; return (1 + my_strlen(str));//递归,并返回1+记录字符串长度 } return 0; } int main() { char str[] = "qwerty"; int ret = my_strlen(str); printf("%d", ret); return 0; }
3.指针-指针的方法
我们都知道指针-指针的结果是他们之间元素的个数(因为这个我在指针初阶篇将过,嘻嘻),这个方法就是利用这个原理来写的。所以我们只用找到字符串首字符的地址和"\0"的地址,然后相减就可以得到字符串的长度了。
#include#include size_t my_strlen(const char* str) { assert(str != NULL);//判断传入的指针是否为空指针 const char* start = str;//创建一个存储首字符地址的指针,注意也要用const修饰,保持类型一致 while (*str)//找"\0"的地址 { str++; } return (str - start);//指针("\0"的地址) - 指针(首字符的地址) = 中间字符的个数 } int main() { char str[] = "qwerty"; int ret = my_strlen(str); printf("字符串的长度 = %d\n", ret); return 0; }
三种方法的运行结果都是一样的
到此这篇关于C语言模拟实现strlen函数详解的文章就介绍到这了,更多相关C语言 strlen函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
下一篇:C#关键字Check简单介绍
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?