zoukankan      html  css  js  c++  java
  • 分析文本文件中各单词出现的频率,并把频率最高的十个词打印出来


         首先,

      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<<"单词"<<'	'<<"次数"<<'	'<<"频率"<<endl;
     22     if(d-1<=10)
     23     {
     24         for(int i=0;i<d-1;i++)
     25     {
     26         cout<<k[i].word<<'	'<<k[i].num<<'	'<<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<<'	'<<k[i].num<<'	'<<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]!='') i++;
     47     
     48     for(;b[i]!='';)
     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]!='') {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]!=''&&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]='';
     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("无法打开文件
    ");
    109         exit(0);
    110     }
    111     while(!feof(fp))
    112     {
    113         g[i]=fgetc(fp);
    114         i++;
    115     }
    116     g[i]='';
    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 }

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

  • 相关阅读:
    QTdebug时没有调试引擎
    快速排序
    MFC之动态创建按钮
    Linux 本人常用到的基本命令
    history 查看历史操作记录在shell脚本执行中无法显示问题
    C#基础学习5
    C#基础学习4
    C#基础学习3
    C#基础学习1
    C#基础学习2
  • 原文地址:https://www.cnblogs.com/gaoxiaolin/p/3577670.html
Copyright © 2011-2022 走看看