问题 A: 统计单词个数
时间限制: 1 Sec 内存限制: 128 MB
题目描述
我们的第一个任务,就是统计给定数据单词的个数。
输入
第一行输入一个整型数T,表示有T行测试数据。从第二行开始到第T+1行会有T组测试数据,每行一串字符,可能为大写字母,小写字母,数字(例如年份)或者空格,每两个单词之间用一个空格分隔,但是不保证每个单词以大写字母开头,也不保证大写字母只出现在开头。每一行可能有一个英文句号作为结尾,也可能没有。最后一个单词后面保证没有空格。每一行为一组测试数据,带有连接符“-”连接的两个词视为一个单词,每一行开头可能有一个空格。
输出
有与测试数据对应的T行,每行为一个整数,即这一组字符串中的单词的个数。
样例输入
3ACM International Collegiate Programming Contest is an annual multi-tiered competitive programming competition among the universitieS of the world.
样例输出
576
提示
//QUST 1226
//问题 A: 统计单词个数
#include<stdio.h>
int main()
{
int count,n;
int num;
scanf("%d",&n);
int in;
int tmp;
for(count=1;count<n;count++){
num = 0;
getchar();
while(1){
in = getchar();
if(in == 32){
if((tmp = getchar())==10){ //space and enter
num++;
break;
}
else{
ungetc(tmp,stdin); //single space
num++;
}
}
if(in == 10){ //single enter
num++;
break;
}
}
printf("%d\n",num);
}
num = 0;
getchar();
while(1){
in = getchar();
if(in == 32){
if((tmp = getchar())==EOF){
num++;
break;
}
else{
ungetc(tmp,stdin);
num++;
}
}
if(in == EOF){
num++;
break;
}
}
printf("%d",num);
return 0;
}
可读性?能吃吗?怎么吃?好吃吗?
忽略每行开头可能出现的空格,每次读到空格时判断下一个字符是否为换行(或EOF)。若是,单词计数加一后退出;若否,继续读,读到换行(EOF)位置加一后退出。
今次没用到newlineornot()啊。