• 10大高频率单词筛选


    //#include<iostream.h>
    #include<string.h>
    #include<fstream.h>
    struct Word                                 //定义结构数组储存单词
    {
      char w[20];
      int num;
    }Word[10000];
    
    void main()                        //主函数
    {
        
        ifstream infile("test1.txt",ios::in);
        char a,t[20];
        int n;
        int wordTypeNum=0,wordNum=0;
        int i;
        int j;
        int ijt;
        for(i=0;i<10000;i++)                 // 给结构数组频率计数num赋初值0
            Word[i].num=0;
        strcpy(Word[0].w,"wow");              //为以后编程方便,将第一个结构成员w赋一个绝对不是单词的词
        
        
        
        if(!infile)                        //判断文件是否打开成功打开       
            cerr<<"File open error"<<endl;
        else
        {
            
            while(infile.get(a))                        //依次读取txt文件中每个字符
            {
                if(a==' '||a==','||a==','||a=='!'||a=='?'||a=='"'||a==':'||a==';')  //这些为单词间隔符,不全
                {
                    t[wordNum]='';                                   //单词结束
                    for(i=0;i<=wordTypeNum;i++)                     //和前面已储存单词进行比较
                    {
                      if(strcmp(t,Word[i].w)==0)                       //找到相同的单词,num累加1
                      {
                          
                          Word[i].num++;wordNum=0;
                      }
                      
                    }
                    if(strcmp(t,Word[i].w)!=0)                  //没找到相同的单词,在新的结构体内储存新单词
                      {
                        wordTypeNum++;  
                        strcpy(Word[wordTypeNum].w,t);
                        Word[wordTypeNum].num++;
                        wordNum=0;
                      }
                    
                    
                }
                else                                    //字符组成单词
                {
                  t[wordNum]=a;
                  wordNum++;
                }
            }
            /*cout<<endl;
            for(i=1;i<=wordTypeNum;i++)
                cout<<Word[i].w<<" "<<Word[i].num<<endl;*/
            for(i=1;i<wordTypeNum;i++)                   //将结构数组根据num成员从大到小排列
            {
              for(j=1;j<wordTypeNum-i;j++)
              {
                if(Word[j].num<Word[j+1].num)
                {
                  ijt=Word[j].num;
                  Word[j].num=Word[j+1].num;
                  Word[j+1].num=ijt;
                }
              }
            }
            cout<<"频率最高的10个单词如下:"<<endl;
            for(i=1;i<=10;i++)                              //输出前10个
            {
              cout<<Word[i].w<<" "<<Word[i].num<<endl;
            }
            infile.close();
        }
    
    }

    设计思路:结构数组存储单词和频数
                  空格及标点符号作为单词分隔符

                  每组成一个单词都和前面已储存的单词进行对比,一样的话累加到上面,不一样在下一个结构体创建新的单词

    不足:有些复杂的分隔符没识别,像多个空格,标点符号加空格;

             如果文章不大,空间浪费严重

             如果文章巨大,会有问题,

             最多9999个单词

  • 相关阅读:
    Chrome 无法登录 GitHub,响应时间过长,可行解决办法
    npm install报错 npm ERR! cb() never called! 检查镜像源!
    Win10 移动文件的时候“卡”在“正在暂停/取消”解决办法
    VS code 彻底关闭插件自动更新功能
    箭头函数 函数中的this指向
    ES6 ES6变量的声明
    范围内的拖拽事件
    div拖拽移动事件
    事件对象的属性 div点击移动事件
    tab切换之循环遍历
  • 原文地址:https://www.cnblogs.com/shangjiaojian/p/3579331.html
Copyright © 2020-2023  润新知