本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

输入格式:

1
输入给出一行字符。

输出格式:

1
在一行中输出单词个数。

输入样例:

1
Let's go to room 209.

输出样例:

1
5

代码与解析:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>//总体而言的算法是检测单词间隔的空格判断数量,然后排除特殊情况

int main() {
int nums = 0, blank = 0, t = 0,alpha=0;//初始化几个变量,其中nums统计单词总数
while (1) {//一直循环就是了,放到里面去处理比较统一
char a = getchar();//不想做一个非常大的字符串所以一个个读入字符吧,a就是每次循环读入的字符
if ((t != 0 || a != ' ')) {//t为判断是否第一次运行,若第一次运行,是空格的,则滤去这个值
if (a == '\n') {//这里判断是否回车作为一行文本的结尾
nums++;
break;//是则跳出循环,并补充最后一个单词块儿的数量
} else if (a == ' ' && blank != 1) {//如果是空格,而且他是第一次出现的话就加单词数量
nums++;
blank++;//顺便加一个blank值,这样就过滤了重复的空格
} else if (a != ' ') {
blank = 0;//当空格外的值即单词出现时blank为零,方可统计下一次单词的空格间断。
alpha = 1;//alpha用于统计字母是否存在
}
}else{
blank++;//如果出现前面一堆空格,用这个再屏蔽后面那几个空格
}
t = 1;//运行一次后t就永远为1,则就不会滤掉后面的空格
}
if (blank == 1)nums -= 1;//如果最后读入完成存在一个空格,则回车前面是以空格结尾,则滤去这个空格
if (alpha != 1)nums =0;//如果字母不存在,即全是空格,因此单词数量为0
printf("%d", nums);
return 0;
}