写一个程序,分析一个文本文件(英文文章)中各个词出现的频率,并把频率最高的十个单词打印出来...

  我编程,我快乐!

      每次编程之前,用我们专业特有的口号,激励、鞭策自己,细心、认真的编写每一个程序,实现一个比较完美的程序。

      首先:分析题目,理清解题思路。

              (1)、读取已经创建好的文本文件(英文文i章);

              (2)、边读取的文件,边将文件中的单词以及出现的次数,保存在已经定义好的结构体中;

              (3)、进行次数排序同时输出频率最高的十个单词以及出现次数;

              (4)、在运行过程中加入了程序运行时间的统计。

      其次:开始程序的各个模块的编写。

      2-25:实现文件的读取及写入,文件读取时采用的是C++中的文件文件流 ifstream,文件的写入过程是一个非常繁杂的过程,起初定义了结构体,(如下) ,一个单词录入完成后(数组保存单独的一个单词),使用定义的结构体指针,指向下一个单词,通过循环,实现文件的读写。

                        struct Word
                        //自定义数据类型用于储存单词和出现次数
                      {
                           char name[30];
                           int num;
                           struct Word *next;
                      };

      2-27:排序操作,通过选择排序,运用结构体指针,进行每个单词出现次数num的大小比较,依大到小进行排列,最后调用OutOff()函数输出出现频率最大的十个单词。

      3-2:进行程序整合上传,基本完成程序要求。

     最后: 程序源代码如下:

  1 //For text document analysis and the maximum output frequency of ten words
  2 //liujing ,February,25,2014
  3 #include<iostream>
  4 #include<fstream>
  5 #include<string>
  6 #include<sys/timeb.h>
  7 #include<windows.h>
  8 using namespace std;
  9 struct Word
 10 //自定义数据类型用于储存单词和出现次数
 11 {
 12 char name[30];
 13 int num;
 14 struct Word *next;
 15 };
 16 void ReadFile(struct Word *head);
 17 void OutOff(struct Word *head,int n);
 18 void Sort(struct Word *head);
 19 
 20 void main()
 21 {  
 22 
 23 //    timeb t1,t2;
 24     long t;
 25     struct Word *head;
 26     head=new Word;
 27     head->next=NULL;
 28     cout<<endl;
 29     cout<<"   *****************分析文本文件,输出频率最高的十个单词*************"<<endl;
 30     cout<<endl;
 31     //ftime(&t1);//获取开始时间
 32     LARGE_INTEGER BegainTime ; 
 33     LARGE_INTEGER EndTime ;  
 34     LARGE_INTEGER Frequency ;
 35     QueryPerformanceFrequency(&Frequency);
 36     QueryPerformanceCounter(&BegainTime) ;
 37     ReadFile(head);
 38     Sort(head);
 39     OutOff(head,10);
 40     QueryPerformanceCounter(&EndTime) ;
 41     t=(( EndTime.QuadPart - BegainTime.QuadPart )*1000 / Frequency.QuadPart);
 42 //    ftime(&t2);//获取结束时间
 43 //    t=(t2.time-t1.time)*1000+(t2.millitm=t1.millitm);//计算时间差
 44     cout<<"             程序运行总时间为:"<<t<<"ms"<<endl;
 45 
 46 }
 47 
 48 void ReadFile(struct Word *head)////读入文件识别并储存单词,统计次数
 49 {
 50     char a,Tword[30];
 51     struct Word *p;
 52     ifstream infile("father.txt");
 53     infile>>noskipws;
 54     if(!infile) 
 55     {
 56         cout<<"cannot open!"<<endl;
 57         return;
 58     }   
 59     while(infile)
 60     { 
 61         int i=0;
 62         infile.get(a);
 63         Tword[0]=' ';//标记位用于判断是否输入单词
 64         while((a>='a'&&a<='z')||(a>='A'&&a<='Z')||temp[0]==' ')
 65         {
 66             if(a>='a'&&a<='z'||a>='A'&&a<='Z')
 67             {
 68                 Tword[i]=a;
 69                 i++;
 70             }
 71             infile.get(a);
 72             if(infile.eof())
 73                 break;
 74         }
 75         Tword[i]='\0';
 76         p=head->next;
 77         while(p)
 78         {
 79             if(!_stricmp(Tword,p->name)) 
 80             {
 81                 p->num++;
 82                 break;
 83             }
 84             p=p->next;
 85         }
 86         if(!p&&Tword[0]!='\0')
 87         {
 88                 p=new Word;
 89                 strcpy(p->name,Tword);
 90                 p->num=1;
 91                 p->next=head->next;
 92                 head->next=p;
 93         }
 94     }
 95     infile.close();
 96 }
 97 
 98 void OutOff(struct Word *head,int n)
 99 {
100     struct Word *p;
101     p=head->next;
102      cout<<"              序号"<<"  "<<"单词"<<"    "<<"频率"<<endl;
103     for(int i=0;i<n;i++)
104     {
105         cout<<"                "<<i<<"    "<<p->name<<"------"<<p->num<<endl;
106         p=p->next;
107     }
108 }
109 void Sort(struct Word *head)
110 {
111     struct Word *p,*q,*s,*l;
112     q=head;
113     p=head->next;
114     s=p->next;
115     p->next=NULL;
116     while(s)
117     {
118         while(p&&p->num>s->num)
119         {
120             q=p;
121             p=p->next;
122         }
123         q->next=s;
124         l=s->next;
125         s->next=p;
126         s=l;
127         p=head->next;
128         q=head;
129     }
130 }

程序运行结果截图:

转载于:https://www.cnblogs.com/jing-si/p/3577238.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值