写一个程序,分析一个文本文件(英文文章)中各个词出现的频率并且把频率最高的10个词打印出来

      软件工程概论这门课顾名思义就是理论课,听起来会相当无聊,但是我们老师给了我们一个不一样的讲课方式,极其生动有趣,让我们进一步了解了软件这个行业。

当拿到这个题目的时候首先想到了三点:

1)读取文本文件涉及对文件的操作,对文件流要熟悉;

2)读取整篇文章并记录总单词数以及各个词的个数,计算出频率;

3)用冒泡排序找出频率最高的十个单词。

    由于对文件的操作并不太了解,所以选择了先计算频率这一项。第一,计算单词总数;第二,将大写字母转化为小写字母比较计算各个单词的数目,并存储在结构体中;第三,计算出频率。   

typedef struct WordCount
{
    char Word[20];
    int  Count;
}WordCount1;

void LowerText(char *text)
{
    char *p=text;
    while (*p!='')
    {
        if ((*p>='A'&& *p<='Z'))
        {
            *p=*p+32 ;
        }
        p++; 
    }
}

     其次选择的是找出频率最高的的十个单词,百度过程中发现其实不用计算出每一个单词的频率,只需找到频率最高的十个词就行了,这样大大提高了工作效率,冒泡排序的算法如下:

void BubbleSort(SqList &L)
{ 
    m=L.length-1;
    flag=1;
    while((m>0)&&(flag==1))
    { 
        flag=0;
        for(j=1;j<=m;j++)
            if(L.r[j].key>L.r[j+1].key)
            {
                flag=1;
                x=L.r[j];
                L.r[j]=L.r[j+1];
                L.r[j+1]=x;     //交换
            }                   //if
            m--;
    }                           //while
}                               //BubbleSort

      最后一项阅读了谭浩强编著的C++程序设计关于输入输出流的相关部分,也在在网上查阅了一些资料,但感觉对文件流还是一头雾水,下面是我认为学习对文件操作首先要理解的一些概念。

      ifstream类,它是从istream类派生的。用来支持从磁盘文件的输入。

      ofstream类,它是从ostream类派生的。用来支持向磁盘文件的输出。

      fstream类,它是从iostream类派生的。用来支持对磁盘文件的输入和输出。

      文件的打开与关闭函数。

      文件输入输出方式及作用。

      还有写这个程序没有用到的对ASCⅡ文件和二进制文件的操作。

 

原文地址:https://www.cnblogs.com/luan/p/3578205.html