注册 登录
编程论坛 C语言论坛

这道题怎么写哇

小晓鸭呀 发布于 2020-04-19 17:05, 1523 次点击
词频统计 (8分)
输出一行字符,统计出现词的频率。

输入格式:
输出一行字符,用gets()读入,不超过80个字符。每个单词用一个或多个空格分开。单词个数的约定,最多为40个单词,每个单词最长为9。

输出格式:
按出现的顺序输出单词及出现的次数,中间用“:”分隔。每行一个单词及次数。

输入样例:
在这里给出一组输入。例如:

I am a teacher

      
   
输出样例:
在这里给出相应的输出。例如:

I:1
am:1
a:1
teacher:1
1 回复
#2
rjsp2020-04-20 09:32
程序代码:
#include <stdio.h>
#include <string.h>

int main( void )
{
    // 读入一行字符
    char line[81];
    fgets( line, sizeof(line), stdin );

    // 拆分成一个个单词
    struct {
        char word[10];
        size_t count;
    } ws[40];
    size_t ws_count = 0;
    for( int a=0,b; sscanf(line+a,"%s%n",ws[ws_count].word,&b)==1; )
    {
        a += b;
        ws[ws_count].count = 0;
        ++ws_count;
    }

    // 统计数量(一共就40个单词,那就不排序然后二分查找了)
    for( size_t i=0; i!=ws_count; ++i )
    {
        size_t j;
        for( j=0; strcmp(ws[i].word,ws[j].word)!=0; ++j );
        ++ws[j].count;
    }

    // 输出结果
    for( size_t i=0; i!=ws_count; ++i )
    {
        if( ws[i].count != 0 )
            printf( "%s:%zu\n", ws[i].word, ws[i].count );
    }
}
1