首先,
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
分析文本文件中各单词出现的频率,并把频率最高的十个词打印出来
原文:http://www.cnblogs.com/gaoxiaolin/p/3577670.html