项目地址
https://github.com/TragedyN/personal-project
PSP表格
解题思路描述
按题目要求,先读入文件内容,使用ifstream逐个读取字符,计字符数变量自增,遇到换行符计行数变量自增,而在加入字符串时,将换行符转化成空格字符,并逐个存入设置为全局变量的string对象中,作为一个完整连续的字符串供检测词频函数使用,最后结果用ofstream写到.txt中。
找资料的话,一开始我是不大了解要如何写一个函数可以逐个读字符,且这个函数必须可以读到换行符,之后就是查了一下如何根据题意分割字符串,还有对map对象进行排序等。
设计实现过程
抱着一切从简的想法,我将计算行数的步骤并到计算字符串的过程中,因此只是设置了一个全局变量记录行数,而读取字符设计为一个函数,该函数可以根据文件名直接读取文件中的内容,并最终将内容处理合成为一个字符串,并返回统计的字符数。
而在统计词频的函数中,我根据题意先后设置了将字符串转换为全小写的函数和切割字符串的函数,此外又设置了一个函数判断字符串组中的字符串是否符合题意,最后就是一个对设置为全局变量的容器(vector)排序的函数,之后返回统计单词数的量。
做功能分割之后,就按照要求设计了三个函数,都放在WordCount.cpp中,各自可以完成自己的功能,函数接受以字符串形式存在的文件名,根据题意分别返回int和打印排序结果,统计行数生成lines.txt文件,统计字符数生成characters.txt,统计单词数写到words.txt,统计前十词频写到WordsFrequency.txt中。
流程图:
关键代码说明
//统计字符数 int character(char* path) { ifstream infile; infile.open(path); //将文件流对象与文件连接起来 char c; int count = 0,i = 0; infile >> noskipws; while (!infile.eof()) { infile >> c;//逐个读取文件中的字符 if (c == ' ') { if (ff[i] != ' '&&i!=0) { //cout << i << endl; lines++;//统计行数 } c = ' '; } ff += c; //cout << ff[i] << endl; count++;//统计字符数 i++; } ff[i] = '