现代软件工程第一次个人作业 词频统计要求与思路

一、要求

1、对源文件(*.txt,*.cpp,*.h,*.cs,*.html,*.js,*.java,*.py,*.php等,文件夹内的所有文件)统计字符数、单词数、行数、词频,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速处理多个文件。

 

2. 使用性能测试工具进行分析,找到性能的瓶颈并改进

 

3. 对代码进行质量分析,消除所有警告

 

4. 设计10个测试样例用于测试,确保程序正常运行(例如:空文件,只包含一个词的文件,只有一行的文件,典型文件等等)

 

 

二、需求分析

(1)基本功能

a) 统计文件的字符数;

b) 统计文件的单词总数;

c) 统计文件的总行数;

d) 统计文件中各单词的出现次数,输出频率最高的10个;

e) 对给定文件夹及其递归子文件夹下的所有文件进行统计;

f) 统计两个单词(词组)在一起的频率,输出频率最高的前10个;

g) 在Linux系统下,进行性能分析,过程写到blog中(附加题)。

(2)输入与输出要求

a) 输入以命令行参数传入(文件夹的路径);

b) 在当前路径输出最终结果文件result.txt。

三、基本思路

看到要求首先想到的是针对每一个要求写一个独立的函数来统计,在统计过程中考虑所有情况之后就可以得到正确的输出,但是之后又想到在统计的过程中都需要遍历所有文件,按照字符对文件进行读取,那么可以直接把所有功能全部写在一个函数里面,统计所有需要统计的项目,虽然这样使一个函数里面的功能过多,但是可以提高速度,而且遍历一遍文件只做一个功能也不符合实际的要求,于是我决定把5个主要功能写在一个函数里面。

然后是具体的实现,统计字符数、总行数和总单词数比较简单,设置计数器每次加1即可。对于出现次数最多的单词和词组,最开始想到的是字典树,但是其查找排序比较费时间所以放弃,后来想到hash函数,而无序容器也有hash函数的功能,由于考虑到自己没有信心写出比标准库更有效的hash所以直接使用unordered_map,统计完所有单词和词组之后由于只要求输出出现次数最多的10个,所以可以考虑用选择或者冒泡排序找出最多的10个就结束循环。遍历文件的方法也不用多说,可以使用 _finddata_t 结构体及 _findfirst 和 _findnext等函数,所以大致思路就是这样,PSP表格等到全部写完之后再上传。

测试样例可以考虑所有情况,比如下面的样例:

aaaa aaaa aaaa aaaa aaaa aaaa aaaa

abc123 abc123 abc123 abc123 abc123 abc123 abc123 abc123

abc123a abc123a abc123a abc123a abc123a abc123a

a/aaa a/aaa a/aaa a/aaa a/aaa

a/aaaaa a/aaaaa a/aaaaa a/aaaaa a/aaaaa a/aaaaa

a/aaaaa123 a/aaaaa123 a/aaaaa123 a/aaaaa456

AaAa AaAa AaAa AaAa AaAa

转载于:https://www.cnblogs.com/j1508015376/p/8653326.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值