WC.exe (基于C/C++的实现)

一、github地址

  https://github.com/CourierLo/WordCounter

二、PSP表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划2020
Estimate估计这个任务需要多少时间55
Development开发600720
Analysis需求分析 1030
Design Spec生成设计文档6060
Design Review设计复审 2060
Coding Standard代码规范2020
Design具体设计2020
Coding具体编码480600
Code Review代码复审6060
Test测试(自我测试,修改代码,提交修改)2020
Reporting报告6040
Test Report测试报告2010
Size Measurement计算工作量5 5
Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划20 20
Total合计780 900

 

三、解题思路

①cmd运行exe嘛,可以从

int main(int argc, char * argv[])

 中的argv[]获得用户想要的操作和路径。记录用户的操作用一个结构体FLAG就可以了,同理答案也用结构体存储。

②怎么统计各种数据?我的方法是先打开文件,一行一行地读入至缓冲区,再对缓冲区进行统计,具体算法看代码,我是暴力模拟的,没用到正则表达式。各类特殊情况在代码注释中已有说明。

③怎么递归文件夹中的所有文件?利用好FindFirstFile和FindNextFile函数生成出各个文件路径就好了,遇到文件夹则递归执行,要注意路径的构造,和各种类型的转换(麻烦!吃了大亏)

④图形用户界面给用户选择文件?调用WINDOWS API即可。同样地要处理类型之间的转化(just like TCHAR to CHAR, too trivial)。输出结果我直接用cmd显示了,用C画框框太麻烦,画的又丑,调用WINDOWS API框框也麻烦。

⑤处理通配符?两种思路:a. 截取用户输入路径中的文件后缀名,在递归查找函数中添加条件过滤其他文件(正则表达式处理之) b. 自己写一个文件后缀匹配函数,加上优秀的字符串匹配算法如KMP,时间复杂度优秀,可以但没必要。我采用前者的方式实现了。

⑥如果用户输入不符合规范怎么办?Well, 我只处理了部分.....用户可能有千奇百怪的输入......

总之知道怎么写之后查一查WINDOWS API就可以了。另外,类型转换稍有不慎害死人啊啊啊啊啊啊!!!

四、设计过程

      本次任务面向过程,没有任何对象。流程如下:(隐去如处理路径和统计数据的各种小细节)

 

//最最最重要函数如下
void dirList(const string& strPath);   //递归遍历文件夹
bool getPathWin(TCHAR* filepath);      //用户选定文件的图形界面
void display();                        //输出函数
void countNum(char* filepath);         //统计文本数据  

五、测试运行

只需要测试递归-s及图形界面-x和各种命令的综合就可以测试完所有代码部分了。

①cmd输入"my project.exe" -s -a -l -c -w D:\测试\?.cpp

 

②cmd输入cmd输入"my project.exe" -s -a -l -c -w D:\测试\

 

          综合①②可以得知countNum和dirList和通配符匹配没有问题。

③测试图形界面

 

 

 

 

 选定文件后

 

④测试各种特殊文件,什么空文件,一个词、一行

⑤用OpenCppCoverage测试代码覆盖度?cmd搞不了啊......

六、总结

  由于很缺乏面向对象的编程经验,还是用老方法处理问题。项目中统计文本数据不难,难在处理各种异常输入、调用Windows API和处理文件路径上。大部分代码我用的C语言写的,由于C对UNICODE支持很不好,然后有些API又是用TCHAR类型的,用的是C++标准,处理中文和类型转换搞得心累。到最后该程序仅支持中文路径而不支持代码文本内中文的统计(代码文本中有中文会Down掉)。原本dirList是用char类型写的,结果程序一直不按输入的路径访问文件......后来用c++的string又莫名其妙地好了......总之有关文本统计的项目不要用C写!测试嘛,未完待续。

  可以完善的地方有:支持中文文本;支持带空格的文件夹名字;搞个图形交互界面 etc.

 

转载于:https://www.cnblogs.com/courierlo/p/11562502.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值