zoukankan      html  css  js  c++  java
  • 软件工程个人作业

    题目:写一个程序,分析一个文本中各个词出现的频率,并且把频率最高的10个词打印出来。

    我觉得这个问题主要是读取文件,然后统计个数和排序几个点。以前也做过类似的读文件,我直接用的以前读文本的方式,即ifstream方式,使用完文件还需关闭,然后使用了结构体和类定义单词,这样方便在文本中寻找,不用判断前后都是空格的为一个单词,结构体单词有单词名和个数,先定下第一个单词,然后将其他单词一一与它比较,是一样的就数量加一,不一样就从头再比较。然后我定义了一个数组,存放每种单词的个数,然后使用冒泡法将单词个数(数组)由大到小排列,最后输出前十个。

    程序:

    #include<iostream>
    #include<fstream>
    #include<string>
    using namespace std;
    class danci{
    public:string name;
        int num;
        danci(){
         num=0;
         name="";
    };
    };
    void readfile(danci*&inchar,int &counter){
     ifstream infile("in.txt");
     if(!infile) {
      cout<<"cannot open!"<<endl;
      return;
    }
     while(infile){
      string temp;
      infile>>temp;
      int i=0;
      for( ;i<counter;i++){
       if(temp==inchar[i].name) {
        inchar[i].num++;
        break;
    }
    }
      if(i==counter&&inchar[i].name!=temp){
       inchar[counter].name=temp;
       inchar[counter].num++;

    counter++;
    }
    };
     infile.close();
    }
    void output(danci*inchar,int counter){
     
     for(int i=0;i<counter;i++)cout<<"单词"<<inchar[i].name<< ":"<<" "<<"出现次数"<<inchar[i].num<<endl;
     

    }
    void main(){
     danci*inchar=new danci[1000];
     int counter=0;
     readfile(inchar,counter);
     output(inchar,counter);
     int a[500];
     int i;
     for( i=0;i<500;i++) a[i]=inchar[i].num;
     int  j,t;
     for (j=0;j<500;j++)
      for(i=0;i<500-j;i++)
       if(a[i+1]>=a[i])
       {
        t=a[i];
        a[i]=a[i+1];
        a[i+1]=t;
       }
       for(i=0;i<10;i++)
        cout<<a[i]<<endl;

    }

    实验结果:

  • 相关阅读:
    table标签中不能有div、span等标签
    奇葩的ASCII 160 号空格
    解决“只能通过Chrome网上应用商店安装该程序”的方法
    谈谈页面流程图(附案例) | 人人都是产品经理
    mysql-connector-java-5.1.34下载
    二、web.xml文件配置
    spring Beans初始化及配置
    Junit单元测试的使用
    什么是IOC?
    二、springMVC项目依赖配置pom.xml
  • 原文地址:https://www.cnblogs.com/xingq/p/3575780.html
Copyright © 2011-2022 走看看