编写一个程序,根据单词的出现频率降序打印出所输入的的各个单词。每个单词前标有它的计数值。
刚刚做作业有点没思路~然后去百度结果没搜到,然后自己认真再想了想就写出来啦~希望能帮到你哈。大二女程序媛一枚,但是是刚跨专业,所以写的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;
}
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;
}
可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。
英文单词
频率统计