C语言:输入多个英文单词,每输入一个单词 回车,以输入0为结束标志,统计输入的英文单词的出现频率。

编写一个程序,根据单词的出现频率降序打印出所输入的的各个单词。每个单词前标有它的计数值。

刚刚做作业有点没思路~然后去百度结果没搜到,然后自己认真再想了想就写出来啦~希望能帮到你哈。大二女程序媛一枚,但是是刚跨专业,所以写的C语言有点C++风格别见怪~来不及注释啦不懂的再问0^ ^(第一次回答好开心)

#include <stdio.h>

#include <cstring>

int main(){

char a[20][20];

char s[20];

int num=0;

while(1){

gets(s);

if(strcmp(s,"0")==0)

break;

strcpy(a[num],s);

num++;

}

int count[20];

for(int i=0;i<num;i++){

count[i]=1;

}

for(int i=0;i<num;i++){

for(int j=i+1;j<num;j++){

if( strcmp(a[i],a[j])==0 && count[i]!=-1){

count[i]++;

count[j]=-1;

}

}

}

int max=count[0];

for(int i=0;i<num;i++){

if(count[i]!=-1 && count[i]>max){

max=count[i];

}

}

for(int i=0;i<num;i++){

for(int j=0;j<num;j++){

if(max<=0)

break;

if(count[j]==max){

printf("%d %s\n",max,a[j]);

}

}

max--;

}

return 0;

}


温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-07-24

if(str[i]==' '||str[i]=='\0')
这里 你是考虑到 结尾\0也会加一
但实际上 
当str[i] == '\0'时 循环因为
for(i=0;str[i]!='\0';i++)
已经退出了
所以 这部分不会加一 导致出错


可以改成这样。
for(i=0;;i++)
{
if(str[i]==' '||str[i]=='\0')
count++;
if(str[i]=='\0') break;
}


先判断 累加 

再退出

第2个回答  2016-11-28

可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

    c语言

    英文单词

    频率统计

第3个回答  2017-07-24
在你回车键旁找一个键 \ 在游戏中你会看到屏幕右上角出现 输入命令的 英文单词然后打上 AI 再回车记得是大写AI
第4个回答  2017-07-24
你可以写个结构体来做
相似回答