C语言实现计算字符串中最后一个单词长度,单词以空格隔开
计算字符串中最后一个单词长度,单词以空格隔开
//计算字符串最后一个单词的长度,单词以空格隔开。 #include<stdio.h> #include<string.h> int main() { char str[5000]; gets(str); int count=0; int len=strlen(str); for(int i=(len-1);i>=0;i--) { if(str[i]!=' ') { count++; } else { break; } } printf("%d\n",count); return 0; }
此代码虽然能运行,但是此函数有一个bug,gets函数:没有指定输入字符的大小,限制输入缓冲区的大小,如果输入的字符大于定义的数组长度,会发生内存越界,堆栈溢出。后果非常怕怕
修改代码如下:
//计算字符串最后一个单词的长度,单词以空格隔开。 #include<stdio.h> #include<string.h> int main() { char str[5000]; fgets(str,5000,stdin); int count=0; int len=strlen(str); for(int i=(len-2);i>=0;i--) { if(str[i]!=' ') { count++; } else { break; } } printf("%d\n",count); return 0; }
fgets函数会指定大小,如果超出数组大小,会自动根据定义数组的长度截断。
还有一点,上面代码中标红部分
for(int i=(len-2);i>=0;i--)
为什么i = (len -2)
因为fgets函数本身会把回车换行符存入了字符串里。所以实际读入的字符串会多一个回车换行符,故
i=(len-2)
欢迎加入作者的小圈子
扫描下方左边二维码加入QQ交流群,扫描下方右边二维码关注个人微信公众号并,获取更多隐藏干货,QQ交流群:859800032 微信公众号:Crystal软件学堂
作者:Liu_Jing bilibili视频教程地址:https://space.bilibili.com/5782182 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在转载文章页面给出原文连接。 如果你觉得文章对你有所帮助,烦请点个推荐,你的支持是我更文的动力。 文中若有错误,请您务必指出,感谢给予我建议并让我提高的你。 |