写一个程序,分析一个文本文件(英文文章)中各个词出现的频率并且把频率最高的10个词打印出来
软件工程概论这门课顾名思义就是理论课,听起来会相当无聊,但是我们老师给了我们一个不一样的讲课方式,极其生动有趣,让我们进一步了解了软件这个行业。
当拿到这个题目的时候首先想到了三点:
(1)读取文本文件涉及对文件的操作,对文件流要熟悉;
(2)读取整篇文章并记录总单词数以及各个词的个数,计算出频率;
(3)用冒泡排序找出频率最高的十个单词。
由于对文件的操作并不太了解,所以选择了先计算频率这一项。第一,计算单词总数;第二,将大写字母转化为小写字母比较计算各个单词的数目,并存储在结构体中;第三,计算出频率。
typedef struct WordCount { char Word[20]; int Count; }WordCount1; void LowerText(char *text) { char *p=text; while (*p!='\0') { 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Ⅱ文件和二进制文件的操作。