现在已经完成代码,可以读取文件中的单词,使其按字典序列输出,如何将其改成按单词出现频率由高至低输出
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 50
struct tnode{
char word[MAX];
int count;
struct tnode *left,*right;
};
struct tnode *treewords(struct tnode *,char *);
void treeprint(struct tnode *);
int main()
{
char word[MAX];
FILE *bfp;
char c;
int i;
struct tnode *root;
root=NULL;
bfp=fopen("article.txt","r");
while((c=fgetc(bfp))!=EOF){
ungetc(c,bfp);
for(i=0;(c=fgetc(bfp))!=' '&&c!='\n'&&c!=EOF;i++){
if((c>='A'&&c<='Z')||(c>='a'&&c<='z')){
c=tolower(c);
word[i]=c;
}else
break;
}
word[i]='\0';
if(strlen(word)>0)
root=treewords(root,word);
}
treeprint(root);
return 0;
}
struct tnode *treewords(struct tnode *p,char *w)
{
int cond;
if(p==NULL){
p=(struct tnode*)malloc(sizeof(struct tnode));
strcpy(p->word,w);
p->count=1;
p->left=p->right=NULL;
}
else if((cond=strcmp(w,p->word))==0){
p->count++;
}
else if(cond<0){
p->left=treewords(p->left,w);
}
else
p->right=treewords(p->right,w);
return (p);
}
void treeprint(struct tnode *p)
{
if(p!=NULL){
treeprint(p->left);
printf("%s %d\n",p->word,p->count);
treeprint(p->right);
}
}
统一词频时单词作为KEY, 次数作为VALUE
这时楼主需要再来一棵树,遍历老树上所有数据,将词频作为KEY, 将单词作为VALUE,将数据插在新树上;
然后再遍历新树,即可得到按词频排序的单词。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。