我复审的代码是来自于12061167 林旭鹏的单词搜索代码。
代码的主要方法是遍历命令行下的路径目录,如果是符合后缀要求的文件则读取文件内容并根据mode(0或1或2)内容加入单词表并且按要求排序输出;如果该目录下是目录文件则递归打开目录文件依次检查每一个文件是否符合要求后在符合要求的文件根据mode类型加入单词字典序排序并且输出。
代码在功能上能够实现根据mode的值提取符合要求的单词并根据先频率再字典序的方式排序输出到指定的文件里,但也存在一些不足:
1.在类wordlib的定义中,当构造函数执行后,系统会依次给ss、words、twoword、sthrwords和deli名字的字符串或者是wordm组分配10000000的空间,如果查找文本的单词数目少的话,在实现类的基础上大大增加了内存消耗,如果单词数目过多与初定的10000000,则会逸出造成系统崩溃。所以我建议此处可以根据搜索到的单词进行动态内存分配的办法,根据需求占用内存存单词,既能平衡内存使用率,也能避免下标逸出的问题。
2.在单词表的排序输出方面,代码根据mode的值(0、1、2)来分别排序单词表的每个单词并输出,其实1单词、2单词、3单词都是存于wordm里的word字符串中。对于单词的比较和排序输出,3者的方法都几乎是一样的,分成3次写会显得代码有冗余。所以我建议根据mode的类型加载完单词表后,可以把单词表的排序打印输出分别各写成一个方法就好,可以使代码更加整洁,集中性更加强。
3.代码在查找符合要求的单词方面用的是判断分隔符再连接形成单词存入的办法,我建议可以使用正则表达式查找的办法,通过改变正则表达式的匹配串就能通过相同的查找函数查找到符合要求的单词,这样3个查找单词的函数也能合成一个通过mode改变匹配串查找单词的方法,也更加直观并且减少代码长度使代码更加清晰。大的方面也可以使用c#集成的map或者dictionary类型来实现单词查找,减少工作量。
代码的优点就是把任务分配成一个个模块任务完成,每个模块的任务量接近,不会产生头重脚轻的现象,模块之间联系紧密,逻辑思维清晰严密,同时也考虑并且处理了异常,保证了代码实现的正确性和科学性。并且变量及方法的定义也很科学,易读易调试,符合代码规范。