单词使用频度分析工具

自从学习c++以来,总是想要做点什么东西。一来做点有用的东西可以获得成就感,提升学习的动力;二来可以实际运用一下c++这个工具。不过由于从python入手,并没有感觉到c++在任何的地方有优势,仿佛什么事都可以用python来做,所以对c++也就提不起兴趣了。

此次好不容易下定决心要做一个什么东西出来,虽然这话说出来就如同立了一个flag,是注定被打倒的命。但总不能放弃抗争吧,所以还是会坚持往下做。

项目简介

利用c++编写一个用来分析项目源码中使用的最多的单词,或者说变量名。通过这样的东西来找出代码库里不熟悉的单词,再利用扇贝批量导入,形成待学习的单词库,从而达成学习英语的闭环。

项目需求

  • 按目录或文件输入待分析文件
  • 可配置过滤规则
  • 可配置存储结果
  • 结果可展示

方案预研

经过大概的预研后,确认了使用GUI选择需要分析的文件或目录,这里可能需要引入MFC的依赖,但至少保证了方案是可行的;

至于可配置的过滤规则,由于要配置规律规则就必须要进行额外的输入,考虑到此项目的学习性质,目的只是为了熟悉c++编程,而不是做成一个对用户有好的应用,暂时不考虑进行开发;至于方案,可选择INI配置文件,若同一目录下没有配置文件则使用默认配置;

存储结果同样通过GUI进行保存,另存为txt文档,以”,”分隔,可方便的转为csv文件;

结果展示初期直接用命令行展示top值,考虑后期修改为使用图表进行展示;

架构设计

功能比较简单,只需要采用输入->处理->输出的模型即可完成整个项目;

功能实现

实现起来果然跟想的有差距,设计的时候希望怎么容易扩展怎么来,真到要实现的时候就成了怎么方便怎么来了,本来就不多的功能给我左砍一刀,右砍一刀就不剩什么了。其实功能本来也没很复杂,只是自己想附加的东西太多了,导致仿佛变得很臃肿一样。

文件选择和保存

长话短说,把文件选择和文件保存利用系统API实现,保存至OPENFILENAME结构体,这样一来不用添加MFC的依赖,做到了最简化,当然之后如果要更换输入方式也比较简单,因为无论是打开还是保存文件,最后获得的都只是一个文件名,保证这个不变就行了。

单词录入和分析

至于这个就更简单了,用一个istringstream类型来缓存单词,然后转存到map里,value值就是该单词出现的次数,这样功能就实现了。

其实这部分能做的工作还有很多,比如做中文和英文的区分、特殊符号的过滤、大小写的统一等等。这部分也由于偷懒就没有往下做了,这个暂时放下不表。

软件试用

软件小范围的试用,自然感觉就是烂了。没有任何提示和指引,功能上也相当的匮乏。这个预料之内,只能怪自己太懒。

项目总结

到了正儿八经的总结了,一个项目做下来不光技术上有些收获,更重要的是对自己的问题也有些发现,可以对之后的方向的决策做出一些指引。

技术上来说,自然基础是不牢的了,不说三方库,不说标准库,连语言自己本身的学习都还没基本掌握,数据结构和算法也是刚入了个门。GUI对我来说,也是一块布满迷雾的大地,还有很多宝藏需要去寻找。

最近有一些感悟,就是技术发展太快,如果只是追赶潮流就会疲于奔命,我想我是得做一些自己的积累了。最近两个月应该会有些时间,打算利用这些时间把LeetCode上的题目刷一遍。刷题的主要方法是找同一类型的题目,先看算法原理,明白大概就好,然后刷题,卡住就找答案。原则就是一个,快。以此获得成就感,免得又半途而废。最后,同时以python和c++完成该系列算法,并做一篇总结。

虽已时不我待,但仍应步步为营!