zoukankan      html  css  js  c++  java
  • 输出一篇英文文章前十个出现频率最高的单词

    #include<iostream>

    using namespace std;

    #define M 100

    #define N 50

    int main()

    {

        FILE *fp;

        char *p,ch,temp[N]={''},str[M][N]={''},g[N];

        int i=0,j=0,a[M]={0}, b[M]={0}, v;

        cout<<"请输入文件路径:";

        cin>>g;

        if((fp=fopen(g,"r"))==NULL)

        {

          printf("无法打开此文件 ");

          exit(0);

        }

      

    //读取文件并把所有单词存储在str[M][N]

     

         while(!feof(fp))

        {  

          ch=fgetc(fp);

          if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))

          {temp[j++]=ch;}

          else

          {p=strlwr(temp);strncpy(str[i++],p,j); j=0;}

      

        } 

     

       

      // 计算各个单词数量 存储在a[M]中,str[k]单词个数为a[k]

        for(int k=0;k<i;k++)

       {     v=0;      //当一个单词只出现一次时,作为标识符v=0

           if(strcmp(str[k],"")!=0)

          {   

             for(int t=k+1;t<i;t++)

             {

                 if(strcmp(str[k],str[t])==0)

                  {  

                    if(a[k]==0)

                    {a[k]=1;}

                     a[k]++; 

                     strcpy(str[t],"");

                      v=1;

                  }

               }

                if(v==0){a[k]=1;}

           }

          

       }

     

    //复制数组a[]b[]

       for(int x=0;x<M;x++) 

      {

       b[x]=a[x]; 

      }

     

      int c;

    //冒泡排序

       for(int y=0;y<M-1;y++)

      {

         for(int z=0;z<M-1-y;z++)

         {

             if(a[z]<a[z+1])

             {c=a[z]; a[z]=a[z+1]; a[z+1]=c;}

          }

       }

    //输出前十个出现频率最高的单词

        for(int h=0;h<10;h++)

       {

         for(i=0;i<M;i++)

         {  if(a[h]==0)break;

             if(a[h]==b[i])

            {

              b[i]=0; printf("%s",str[i]); cout<<"="<<a[h]<<endl; break;

             }

         }

       }

    //关闭文件

      fclose(fp);

      return 0;      

    }

     

     

    /*解题思路:先将文件里的所有内容都读出来,在读的过程中根据单词之间的分隔符,将一个个单词分离出来并存储,最后在计算各个单词出现的次数,并输出前十个出现频率最高的单词。

    在编这个程序时遇到的问题:当定义一个字符数组时没有初始化,若之后在程序中赋值给该字符数组的长度小于该定义的字符数组长度时,输出时就会出现多余的乱码 ,避免此问题出现就要在定义字符数组时初始化例如 char a[10]={''}; 另外在c语言和c++中不存在字符串变量,也不存在字符串数组。*/

  • 相关阅读:
    工作杠杆
    AngularJS 自定义指令directive 介绍
    CentOS卸载OpenJDK并安装Sun JDK
    jQuery Datatable 表格插件
    ZTree 使用范例
    jQuery UI 实例 – 切换(Toggle)
    curl 抓取页面信息
    报警平台
    PHP imagechar() 图形验证码 字体太小问题
    Discuz!在线中文分词服务
  • 原文地址:https://www.cnblogs.com/yangshichao/p/3577245.html
Copyright © 2011-2022 走看看