以下程序,计算一句话中的单词个数,问原理#includemain(){char string[81];int i,num = 0,word = 0;/*word标志位*/char c;gets(string);for(i = 0;(c = string[i])!='\0';i++)if(c == ' ') word = 0;else if(word == 0) \*这里通过计算空格
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/05 22:13:39
![以下程序,计算一句话中的单词个数,问原理#includemain(){char string[81];int i,num = 0,word = 0;/*word标志位*/char c;gets(string);for(i = 0;(c = string[i])!='\0';i++)if(c == ' ') word = 0;else if(word == 0) \*这里通过计算空格](/uploads/image/z/5172310-46-0.jpg?t=%E4%BB%A5%E4%B8%8B%E7%A8%8B%E5%BA%8F%2C%E8%AE%A1%E7%AE%97%E4%B8%80%E5%8F%A5%E8%AF%9D%E4%B8%AD%E7%9A%84%E5%8D%95%E8%AF%8D%E4%B8%AA%E6%95%B0%2C%E9%97%AE%E5%8E%9F%E7%90%86%23includemain%28%29%7Bchar+string%5B81%5D%3Bint+i%2Cnum+%3D+0%2Cword+%3D+0%3B%2F%2Aword%E6%A0%87%E5%BF%97%E4%BD%8D%2A%2Fchar+c%3Bgets%28string%29%3Bfor%28i+%3D+0%3B%28c+%3D+string%5Bi%5D%29%21%3D%27%5C0%27%3Bi%2B%2B%29if%28c+%3D%3D+%27+%27%29+word+%3D+0%3Belse+if%28word+%3D%3D+0%29+%5C%2A%E8%BF%99%E9%87%8C%E9%80%9A%E8%BF%87%E8%AE%A1%E7%AE%97%E7%A9%BA%E6%A0%BC)
以下程序,计算一句话中的单词个数,问原理#includemain(){char string[81];int i,num = 0,word = 0;/*word标志位*/char c;gets(string);for(i = 0;(c = string[i])!='\0';i++)if(c == ' ') word = 0;else if(word == 0) \*这里通过计算空格
以下程序,计算一句话中的单词个数,问原理
#include
main()
{
char string[81];
int i,num = 0,word = 0;/*word标志位*/
char c;
gets(string);
for(i = 0;(c = string[i])!='\0';i++)
if(c == ' ') word = 0;
else if(word == 0) \*这里通过计算空格个数来获得单词个数,这里又加了个条件语句,假如遇见两个连续空格,条件似乎依旧成立,岂不是计算错误了,应该这么做,还是我理解错误*\
{
word = 1;
num++;
}
printf("There are %d words in the line.\n",num);
}
以下程序,计算一句话中的单词个数,问原理#includemain(){char string[81];int i,num = 0,word = 0;/*word标志位*/char c;gets(string);for(i = 0;(c = string[i])!='\0';i++)if(c == ' ') word = 0;else if(word == 0) \*这里通过计算空格
这个程序的运行没有问题,虽然有改进的地方.
c = string[i] 这个已经是按照字符“一个一个”地读取(在for循环里)并判断string字符串中的字符.即便是连续两个空格,第1个空格,word被赋值为0,记数标志没有设置,那么后面的num不会执行;第2个空格(任在for循环中执行),也不会设置标志,因此后面的num++也不执行,所以不必担心.
程序改进的地方或应该注意的是,string[81]这样的写法,没有对输入作限制,很容易溢出;比如用户输入字符串超过80会怎样?而且string[]也没有初始化(虽然大多现代c/c++编译器都会自动初始化)但依然应该有好习惯.
如果不是必须,其实可以用strtok这样现成的函数作统计,好处是分隔符可以随时添加,而且可以不止一个,这样比自己写代码一一比较要方便.当然strtok有自己的问题,比如会破坏原来的字符串,因此也许需要先copy保留原来的字符串,然后再处理.