首页 > 其他 > 详细

分析文本文件中各单词出现的频率,并把频率最高的十个词打印出来

时间:2014-03-03 18:01:29      阅读:493      评论:0      收藏:0      [点我收藏+]


     首先,

bubuko.com,布布扣
  1 #include <iostream>
  2 
  3 #include <stdio.h>
  4 #include "stdlib.h"
  5 using namespace std;
  6 
  7 double number=0;
  8 int d=0;
  9 struct word_cunchu
 10 {
 11         double pinlv;
 12     char *word;
 13     int num;
 14     
 15 };
 16 word_cunchu k[8666];
 17 char g[86666];
 18 void qianshi()
 19 
 20 {
 21     cout<<"单词"<<\t<<"次数"<<\t<<"频率"<<endl;
 22     if(d-1<=10)
 23     {
 24         for(int i=0;i<d-1;i++)
 25     {
 26         cout<<k[i].word<<\t<<k[i].num<<\t<<k[i].pinlv<<endl;
 27     }
 28     }
 29     else{
 30         
 31     
 32     for(int i=0;i<10&&i<d-1;i++)
 33     {
 34         cout<<k[i].word<<\t<<k[i].num<<\t<<k[i].pinlv<<endl;
 35     }
 36     }
 37     cout<<"总类:"<<d-1<<endl;
 38     cout<<"总个数:"<<number<<endl;
 39 }
 40 void chuli(char b[])
 41 {
 42     int i=0,j,y;
 43     char *p;
 44     char *t;
 45     int kk;
 46     while((b[i]==;||b[i]==.||b[i]==:||b[i]=="||b[i]==,||b[i]== ||b[i]==10||b[i]==13||b[i]==!||b[i]==(||b[i]==))&&b[i]!=\0) i++;
 47     
 48     for(;b[i]!=\0;)
 49     {
 50         if((b[i]==;||b[i]==.||b[i]==:||b[i]=="||b[i]==,||b[i]== ||b[i]==10||b[i]==13||b[i]==!||b[i]==(||b[i]==))&&b[i]!=\0) {i++;continue;}
 51         else
 52         {
 53             j=0;
 54             p=new char[20];
 55             while(b[i]!=;&&b[i]!=.&&b[i]!=:&&b[i]!="&&b[i]!=,&&b[i]!= &&b[i]!=\0&&b[i]!=10&&b[i]!=13&&b[i]!=!&&b[i]!=(&&b[i]!=))
 56             {
 57             p[j]=b[i];
 58             i++;
 59             j++;    
 60             }
 61             p[j]=\0;
 62             
 63             for(y=0;y<d;y++)
 64             {
 65                 if(strcmp(p,k[y].word)==0) {k[y].num++;break;}
 66             }
 67             if(y==d)
 68             {
 69             k[d].word=p;
 70             k[d].num=1;
 71             d++;
 72             }
 73         
 74         }
 75         
 76     }
 77     j=0;
 78     for(i=0;i<d-1;i++)
 79     {
 80         for(j=0;j<d-1;j++)
 81         {
 82             if(k[j].num<k[j+1].num) {t=k[j].word;k[j].word=k[j+1].word;k[j+1].word=t;kk=k[j].num;k[j].num=k[j+1].num;k[j+1].num=kk;}
 83             
 84         }
 85     }
 86         for( i=0;i<d-1;i++)
 87     {
 88         number=number+k[i].num;
 89     }
 90     
 91         for( i=0;i<d-1;i++)
 92     {
 93         k[i].pinlv=k[i].num/number;
 94     }
 95 }
 96 
 97 
 98 void wenjian_R()
 99 {
100     FILE *fp;
101     char ch;
102     int i=0;
103     char a[20];
104     cout<<"输入文件名:";
105     cin>>a;
106     if((fp=fopen(a,"r"))==NULL)
107     {
108         printf("无法打开文件\n");
109         exit(0);
110     }
111     while(!feof(fp))
112     {
113         g[i]=fgetc(fp);
114         i++;
115     }
116     g[i]=\0;
117     fclose(fp);
118 
119 }
120 
121 void main(int argc, char *argv[])
122 {
123     
124     
125     wenjian_R();
126     chuli(g);                
127     qianshi();
128     
129     
130 }

   解题思路:先把整个文件读出来,然后再分隔出一个个单词。 每个单词存储在一个结构体中,最后将前十个出现频率最高的单词输出。  错误分析:要注意读文件时的路径写正确。

bubuko.com,布布扣

分析文本文件中各单词出现的频率,并把频率最高的十个词打印出来,布布扣,bubuko.com

分析文本文件中各单词出现的频率,并把频率最高的十个词打印出来

原文:http://www.cnblogs.com/gaoxiaolin/p/3577670.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!