这道题怎么写哇
词频统计 (8分)输出一行字符,统计出现词的频率。
输入格式:
输出一行字符,用gets()读入,不超过80个字符。每个单词用一个或多个空格分开。单词个数的约定,最多为40个单词,每个单词最长为9。
输出格式:
按出现的顺序输出单词及出现的次数,中间用“:”分隔。每行一个单词及次数。
输入样例:
在这里给出一组输入。例如:
I am a teacher
输出样例:
在这里给出相应的输出。例如:
I:1
am:1
a:1
teacher:1
#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 ); } }