读取一篇英文文档,并输出其中出现频率最多的十个单词

通过看课件,查资料,问同学,百度等多种方法,出来了这个程序,老是虽然给了一周的时间,但是时间算下来时间不多除了各种各样的事情,开始我用了类的方法,但是在查找频率最高的十个单词的时候遇到了问题,不会了,后来不行了,就换了一种方法,用的是结构体。现在还不是很明白感觉,大家看吧。

 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 }

 

posted @ 2014-03-03 12:38  平凡的凡  阅读(463)  评论(0编辑  收藏  举报