采用C或C++编程,对出现的单词次数进行统计,并按照出现次数从低到高排序
答案:3 悬赏:0
解决时间 2021-02-19 16:37
- 提问者网友:黑米和小志
- 2021-02-18 15:57
采用C或C++编程,对出现的单词次数进行统计,并按照出现次数从低到高排序
最佳答案
- 二级知识专家网友:有你哪都是故乡
- 2021-02-18 16:30
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "ctype.h"
#include "string.h"
struct abc{
int n;
char w[21];
};
void main(void){
struct abc wn[500],t;
int i,j,k,x;
FILE *fp;
if((fp=fopen("intxt.txt","r"))==NULL){
printf("Failed to open the input file...\n");
exit(0);
}
memset((char *)wn,'\0',sizeof(wn));
i=j=0;
while((wn[i].w[j]=getc(fp))!=EOF){
if(isalpha(wn[i].w[j])) j++;
else{
wn[i].w[j]='\0';
for(k=0;k if(!strcmp(wn[i].w,wn[k].w)){
wn[k].n++;
break;
}
if(k>=i && j) wn[i++].n++;
j=0;
}
}
fclose(fp);
for(j=0;j for(x=j,k=j+1;k if(wn[x].n>wn[k].n) x=k;
if(x!=j){
t=wn[j];
wn[j]=wn[x];
wn[x]=t;
}
}
if((fp=fopen("outtxt.txt","w"))==NULL){
printf("Failed to open the output file...\n");
exit(0);
}
for(i=0;i fprintf(fp,"%s\t%d\n",wn[i].w,wn[i].n);
printf("%s\t%d\n",wn[i].w,wn[i].n);
}
fclose(fp);
}追问能不能给一些详细的注释啊,还有解题思路,谢谢啦追答说说思路吧。创建了一个结构体,其中有两个元素,一个是单词数组w,另一个是这个单词出现的次数n。在main中声明了一个结构体数级wn,有500个元素,所以本代码只适合不同单词不超过500的情况。从文件中一个字符一个字符地读,存放到结构体数组中的单词数组w中,当读到空格时,把这个空格变成'\0',表示单词结束了;这时再用这个单词与从0下标开始的结构体数组中的单词数组中的单词一次比较,若相等,则对该结构元素中的n增1,而不对结构体数组下标增1,说明单词重复了,下一个单词会覆盖刚刚读到的这个单词;若没有发现相同的单词,就对结构体数组下标增1,同时给这个元素中的n置1,说明是个新单词。再向后读,凡不是字母的都丢弃而不处理,直到遇到一个字母时作为新单词的开始而进行下一轮处理过程。直到遇到文件结束符时结束读取,关闭文件。然后对结构体数组按照n的大小排序,最后输出。
#include "stdio.h"
#include "ctype.h"
#include "string.h"
struct abc{
int n;
char w[21];
};
void main(void){
struct abc wn[500],t;
int i,j,k,x;
FILE *fp;
if((fp=fopen("intxt.txt","r"))==NULL){
printf("Failed to open the input file...\n");
exit(0);
}
memset((char *)wn,'\0',sizeof(wn));
i=j=0;
while((wn[i].w[j]=getc(fp))!=EOF){
if(isalpha(wn[i].w[j])) j++;
else{
wn[i].w[j]='\0';
for(k=0;k if(!strcmp(wn[i].w,wn[k].w)){
wn[k].n++;
break;
}
if(k>=i && j) wn[i++].n++;
j=0;
}
}
fclose(fp);
for(j=0;j for(x=j,k=j+1;k if(wn[x].n>wn[k].n) x=k;
if(x!=j){
t=wn[j];
wn[j]=wn[x];
wn[x]=t;
}
}
if((fp=fopen("outtxt.txt","w"))==NULL){
printf("Failed to open the output file...\n");
exit(0);
}
for(i=0;i
printf("%s\t%d\n",wn[i].w,wn[i].n);
}
fclose(fp);
}追问能不能给一些详细的注释啊,还有解题思路,谢谢啦追答说说思路吧。创建了一个结构体,其中有两个元素,一个是单词数组w,另一个是这个单词出现的次数n。在main中声明了一个结构体数级wn,有500个元素,所以本代码只适合不同单词不超过500的情况。从文件中一个字符一个字符地读,存放到结构体数组中的单词数组w中,当读到空格时,把这个空格变成'\0',表示单词结束了;这时再用这个单词与从0下标开始的结构体数组中的单词数组中的单词一次比较,若相等,则对该结构元素中的n增1,而不对结构体数组下标增1,说明单词重复了,下一个单词会覆盖刚刚读到的这个单词;若没有发现相同的单词,就对结构体数组下标增1,同时给这个元素中的n置1,说明是个新单词。再向后读,凡不是字母的都丢弃而不处理,直到遇到一个字母时作为新单词的开始而进行下一轮处理过程。直到遇到文件结束符时结束读取,关闭文件。然后对结构体数组按照n的大小排序,最后输出。
全部回答
- 1楼网友:走死在岁月里
- 2021-02-18 18:53
路过!帮顶!
- 2楼网友:duile
- 2021-02-18 17:40
#include
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |