1031 统计单词个数
时间限制:1000MS 代码长度限制:10KB
提交次数:4863 通过次数:2810
题型: 编程题 语言: G++;GCC
Description
写一个函数实现:输入一行字符,以空格分割单词,回车结束输入,输出单词的个数
输入样例
There are many students and many trees!
输出样例
7
错误解法:
#include<stdio.h>
main()
{
int count=0,flag=0;
char zm;
while((zm=getchar())!='\n'){
if(!(zm>='A'&&zm<='Z'||zm>='a'&&zm<='z'))
count++;
}
printf("%d",count+1);
}
这种方法是错的,因为这样的话每算一个非字母符号,就算坐一个单词(每打一个空格,就计算一个单词),忽略了单词与单词之间可以有多个空格的情况。
正确解法:
#include<stdio.h>
int main()
{
int num=0,flag=0;
char c;
while((c=getchar())!='\n')
{
if(!(c>='a'&&c<='z'||c>='A'&&c<='Z'))
flag=0;
else if(flag==0)
{
flag=1;
num++;
}
}
printf("%d",num);
}
这种方法使用了一个flag标志住,将flag初始化为0,当输入的字符不是字母时,标志flag为0;否则如果flag==0(前一个字符是空格)且输入的是字母时(即遇到了单词的开头),令flag=1,num++。(空格时flag为0,字母时flag为1,只有当从0到1转变时,num++)