统计单词
题目描述
编一个程序,读入用户输入的,以“.”结尾的一行文字,统计一共有多少个单词,并分别输出每个单词含有多少个字符。 (凡是以一个或多个空格隔开的部分就为一个单词)
输入描述:
输入包括1行字符串,以“.”结束,字符串中包含多个单词,单词之间以一个或多个空格隔开。
输出描述:
可能有多组测试数据,对于每组数据,
输出字符串中每个单词包含的字母的个数。
输入例子:
hello how are you.
输出例子:
5 3 3 3
遇到问题: while(scanf("%[^.]", str) != EOF)死循环,第一次输入,
感觉输入缓冲区stdin没有清空, 使用fflush(stdin)不起作用。
网上搜索了下: 因为fflush不是标准C函数
可以采用方法:
.通过读完标准缓冲区中的剩余字符并丢弃掉来清空标准缓冲区,使用的函数是getchar(),此函数的作用是从标准输入缓冲区中读出一个字符,此方法中Linux中可行
1.通过读取剩余的字符并丢弃掉;
char ch;
while((ch=getchar())!='/n'&&ch!=EOF);
或者是:
char s[1024];
fgets(s,1024,stdin);
2.使用函数setbuf(stdin,NULL);
#include <stdio.h>
void count(char str[])
{
char *p = str;
int cnt, flag = 0;
while (*p != '.' && *p != '\0')
{
for (; *p == ' '; ++p);
for (cnt = 0; *p != ' ' && *p != '.' && *p != '\0'; ++p, cnt++);
if (flag)
printf(" %d", cnt);
else
{
flag = 1;
printf("%d", cnt);
}
}
printf("\n");
}
/*fflush 不是标准C函数, 只是个扩展, 使用不起作用*/
/*清空缓存两种方法:
1:
char ch;
while( (ch = getchar())!='\n' && ch != EOF );
2:
char str[1024];
fgets(str, 1024, stdin); */
int main(void)
{
char str[256];
char ch;
while(scanf("%[^.]", str) != EOF)
{
while( (ch = getchar())!='\n' && ch != EOF );
/*fflush(stdin); 不起作用*/
count(str);
}
return 0;
}
浙公网安备 33010602011771号