例7.8 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
程序如下:
#include <Stdio.h>
main()
{
char string[81];
int i,num=0,word=0;
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);
}
运行情况如下:
I am a boy.
There are 4 wordS in the line.
程序中变量i作为循环变量,num用来统计单词个数,word作为判别是否单词的标志,若word=0表示未出现单词,如出现单词word就置成1。算法见图7.17所示。
解题的思路是这样的:单词的数目可以由空格出现的次数决定(连续的若干个空格作为出现一次空格;一行开头的空格不统计在内)。如果测出某一个字符为非空格,而它的前面的字符是空格,则表示“新的单词开始了”,此时使num(单词数)累加1。如果当前字符为非空格而其前面的字符也是非空格,则意味着仍然是原来那个单词的继续,num不应再累加1。前面一个字符是否空格可以从word的值看出来,若word=0,则表示前一个字符是空格;如果word=1,意味着前一个字符为非空格。可以用图7.18表示。
程序如下:
#include <Stdio.h>
main()
{
char string[81];
int i,num=0,word=0;
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);
}
运行情况如下:
I am a boy.
There are 4 wordS in the line.
程序中变量i作为循环变量,num用来统计单词个数,word作为判别是否单词的标志,若word=0表示未出现单词,如出现单词word就置成1。算法见图7.17所示。
解题的思路是这样的:单词的数目可以由空格出现的次数决定(连续的若干个空格作为出现一次空格;一行开头的空格不统计在内)。如果测出某一个字符为非空格,而它的前面的字符是空格,则表示“新的单词开始了”,此时使num(单词数)累加1。如果当前字符为非空格而其前面的字符也是非空格,则意味着仍然是原来那个单词的继续,num不应再累加1。前面一个字符是否空格可以从word的值看出来,若word=0,则表示前一个字符是空格;如果word=1,意味着前一个字符为非空格。可以用图7.18表示。