通过看课件,查资料,问同学,百度等多种方法,出来了这个程序,老是虽然给了一周的时间,但是时间算下来时间不多除了各种各样的事情,开始我用了类的方法,但是在查找频率最高的十个单词的时候遇到了问题,不会了,后来不行了,就换了一种方法,用的是结构体。现在还不是很明白感觉,大家看吧。
1 #include<iostream> 2 #include<fstream> 3 using namespace std; 4 //定义单词的结构体 5 struct word 6 { 7 char w[20]; 8 int num; 9 struct word *next; 10 }; 11 void sort(struct word *head) 12 { 13 int i; 14 int a[10]; 15 struct word *q; 16 for(i=0;i<10;i++) //初始化数组 17 a[i]=0; 18 //对统计后的单词频率进行排序并输出 19 cout<<"频率最高的十个单词是"<<endl; 20 for(i=0;i<10;i++) 21 { 22 q=head; 23 while(q!=NULL) 24 { 25 if(q->num>a[i]) 26 a[i]=q->num; 27 else 28 q=q->next; 29 } 30 q=head; 31 while(q!=NULL) 32 { 33 if(a[i]==q->num) 34 { 35 q->num=0; 36 cout<<q->w; 37 cout<<" "<<a[i]<<" "<<endl; 38 break; 39 } 40 else 41 q=q->next; 42 } 43 } 44 } 45 void main() 46 { 47 FILE *fp; 48 int i; 49 int a[10]; 50 char b; 51 struct word *head=NULL; 52 struct word *q; 53 for(i=0;i<10;i++) //初始化数组 54 a[i]=0; 55 if((fp=fopen("WZ.txt","r"))==NULL) 56 { 57 cout<<"无法打开此文件!"<<endl; 58 } 59 //统计单词的出现频率 60 while(!feof(fp)) 61 { 62 char *p=new char; 63 fscanf(fp,"%s",p); 64 if(head==NULL) 65 { 66 struct word *t=new word; 67 strcpy(t->w,p); 68 t->num=1; 69 t->next=NULL; 70 head=t; 71 } 72 else 73 { 74 struct word *d=head; 75 while(d!=NULL) 76 { 77 if(strcmp(d->w,p)==0) 78 { 79 int number= d->num; 80 number++; 81 d->num = number; 82 break; 83 } 84 d=d->next; 85 } 86 if(d==NULL) 87 { 88 struct word *t=new word; 89 strcpy(t->w, p); 90 t->num=1; 91 t->next=head; 92 head=t; 93 } 94 } 95 } 96 sort(head); 97 98 }
读取一篇英文文档,并输出其中出现频率最多的十个单词,布布扣,bubuko.com
原文:http://www.cnblogs.com/lrffln/p/3578144.html