中易网

高手能再帮我解释个程序吗?

答案:1  悬赏:60  
解决时间 2021-04-18 08:32

单词统计: 要求 (1)输入任意一段英文 (2)根据1中输入的各个单词出现的概率的高低输出前五个单词 (3)具有输入和输出界面

程序

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define M 20 //单词长度上限

void insert(char **s,int *a,char c[],int n){ //把一个单词c插入字符串数组s

int i;

for(i=0;i<n;i++){

if(strcmp(s[i],"")==0){ //如果这个单词没有出现过

strcpy(s[i],c); //把单词复制到一个空白区域

a[i]++; //此单词的计数加1

break;

}

else if(strcmp(s[i],c)==0){ //如果这个单词出现过

a[i]++; //此单词的计数加1

break;

}

}

}

void output(char **s,int *a,int n){ //输出出现频率最高的5个

int i,j,max;

for(i=0;a[i]!=0&&i<5;i++){

max=0;

for(j=0;j<n&&a[j]!=0;j++)

if(a[j]>a[max]) max=j;

printf("%s ",s[max]);

a[max]=-1;

}

printf("\n");

}

int main(){

char **s;

char temp[M];

int *a;

int i,n;

printf("请输入你打算输入单词的个数: ");

scanf("%d",&n);

s=(char **)calloc(n,sizeof(char *));

for(i=0;i<n;i++)

s[i]=(char *)calloc(M,sizeof(char)); //动态分配字符串数组的空间

a=(int *)calloc(n,sizeof(int)); //分配计数数组的空间

for(i=0;i<n;i++){ //初始化两个数组

strcpy(s[i],"");

a[i]=0;

}

printf("输入你要输入的单词:\n"); //输入单词

for(i=0;i<n;i++){

scanf("%s",temp);

insert(s,a,temp,n);

}

printf("频率最高的5个单词:\n"); //输出

output(s,a,n);

for(i=0;i<n;i++)

free(s[i]);

free(s);

free(a);

return 0;

}

最佳答案

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 20 //单词长度上限
void insert(char **s,int *a,char c[],int n){ //把一个单词c插入字符串数组s
int i;
for(i=0;i<n;i++)
{


if(strcmp(s[i],"")==0){ //如果这个单词没有出现过
strcpy(s[i],c); //把单词复制到一个空白区域
a[i]++; //此单词的计数加1
break;
}else if(strcmp(s[i],c)==0){ //如果这个单词出现过
a[i]++; //此单词的计数加1
break;
}
}
}


void output(char **s,int *a,int n){ //输出出现频率最高的5个
int i,j,max;
for(i=0;a[i]!=0&&i<5;i++){//由于不重复的单词数量可能小于5,所以用a[i]!=0控制循环
max=0;
for(j=0;j<n&&a[j]!=0;j++) if(a[j]>a[max]) max=j;//选取当前最大的计数对应的数组标号
printf("%s ",s[max]);//输出最大计数的单词
a[max]=-1;//使该最大计数单词的数量为-1(最小)
}//继续找下一个最大计数的单词
printf("\n");
}


int main(){


char **s;
char temp[M];
int *a;
int i,n;//n放着要输入的单词个数
printf("请输入你打算输入单词的个数: ");
scanf("%d",&n);


s=(char **)calloc(n,sizeof(char *));//为具有n个长度为(char *)元素的数组分配内存
for(i=0;i<n;i++)
s[i]=(char *)calloc(M,sizeof(char)); //动态分配字符串数组的空间
//对于每一个s[i]指针,为具有M个长度为(char)元素的数组分配内存
a=(int *)calloc(n,sizeof(int)); //分配计数数组的空间
//为具有n个长度为(int)元素的数组分配内存



for(i=0;i<n;i++)
{ //初始化两个数组
strcpy(s[i],"");
a[i]=0;
}
printf("输入你要输入的单词:\n"); //输入单词
for(i=0;i<n;i++)
{
scanf("%s",temp);
insert(s,a,temp,n);
}
printf("频率最高的5个单词:\n"); //输出
output(s,a,n);
for(i=0;i<n;i++) free(s[i]);//以下代码用来释放分配的三个数组空间
free(s);
free(a);
return 0;
}

我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
福建周宁县有几个叶婷
法国施耐德电气与中国正泰了结专利诉讼
D663手机游戏
福清市医保卡在那里补办
上海防静电地板哪家好?
新龙宾馆(来宾象州县)地址在什么地方,想过去
优胜教育加盟网怎样?谢谢了
女女说要和你火拼怎么办??
一首歌总让我想起了她?
为什么其他网站的花都特工只跟新到日本地震那
家里墙上2个网口可以同时上网吗?
安卓系统更新后的数据包要怎么才能删除啊?
下胃管是什么意思
五华国际欢乐影院今天下午3d影片
我想在浙江省江山市养鸡,请问养什么鸡好?
推荐资讯
周大福今日黄金价格多少一克
2009年QQ宠物熊熊第二轮放号什么时候
怎样才能让我在早起情况下上课又不困
以生活处处是课堂写作文300字
武侯航空路丰德万瑞广场怎么到土桥村公交线路
重庆小面中的豌杂面的英文
在广西省那南宁市怎么办理开一间超市?
韵达快递派一个件快递员提成多少?
为什么老做同一个梦
哈尔滨平房区香悦蓝天下是什么街道
窗花的寓意是什么?窗花的剪法呢?
源思连甜品店都有哪些系列卖?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?