以下程序,计算一句话中的单词个数,问原理#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/05/08 20:35:56
以下程序,计算一句话中的单词个数,问原理#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) \*这里通过计算空格

以下程序,计算一句话中的单词个数,问原理#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保留原来的字符串,然后再处理.