桑海

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

统计单词

题目描述

编一个程序,读入用户输入的,以“.”结尾的一行文字,统计一共有多少个单词,并分别输出每个单词含有多少个字符。 (凡是以一个或多个空格隔开的部分就为一个单词) 

输入描述:
输入包括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;
}

  




posted on 2016-12-14 10:27  桑海  阅读(358)  评论(0编辑  收藏  举报