题目:
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:
Let's go to room 209.
输出样例:
5
代码:
#include <stdio.h>
int main() {
char prio, newCH; /*prior意为“先前的”,newCH表示新输入的符号*/
prior = ' ';
int cnt = 0;
while ((newCH = getchar()) != '\n') {
if (prior == ' ' && newCH != ' ') {
cnt++;
}
prior = newCH;
}
printf("%d", cnt);
return 0;
}
分析:
观察题目发现,只有前一个字符是“空格”,后面一个字符为“非空格”或“非回车”(以下简称“双非”)的时候才能算是一个新单词。
比如:“_26_”,“_MOK” 等(方便查看,下划线代表空格),只要出现上面情况就可以计数;“__”不满足判断条件不会计数。
定义的变量“prior”和“newCH”分别代表“前面的符号”和“新输入的符号”。
特殊情况是当输入的第一个符号是“双非”时,这也算一个新单词,这是在进入循环前让“prior”为空格的原因。
循环中,作判断:只有前为“空格”,后为“双非”,cnt才加一。然后让prior等于新输入的字符,为下次判断作准备。