作业要求参照:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2446]
随着完成作业的增多,软件工程的原则也逐渐体现在作业代码里了,一些以前的坏习惯也在逐步纠正。让我印象比较深刻的是代码的重复利用这一块。这儿举两个作业进行对比,一个是词频统计,另一个是四则运算。
git地址如下:词频统计:https://git.coding.net/shishishaonian/word_count.githttps://git.coding.net/shishishaonian/word_count.githttps://git.coding.net/shishishaonian/word_count.githttps://git.coding.net/shishishaonian/word_count.git
四则运算:https://git.coding.net/shishishaonian/four_arithmetic_operation.git
在词频统计代码中,我并没有考虑到代码的重复利用,对每一个题目要求都编写一个统计函数,最后整个代码很长,main函数写了接近300行,阅读起来很困难。部分代码如下:
int main(int argc, char** argv) { if (argc == 3) { FILE *fp = NULL; fp = fopen(argv[2], "r"); char ch = fgetc(fp); int len = 0; long totalword = 0; string str = ""; map<string, int>mp; vector<string>s; vector<pair<string, int> >pa; while (ch != EOF) { ...//统计单词函数 } ...//统计词频函数 return 0; } if (argc == 2) { if (strcmp(argv[1], "-s") == 0) { char ch; int len = 0; long totalword = 0; string str = ""; map<string, int>mp; vector<string>s; vector<pair<string, int> >pa; while ((ch = getchar()) != EOF) { ...//统计单词函数 } ...//统计词频函数 return 0; } else { char buf[80]; char *myFileBasePath =getcwd(buf, sizeof(buf)); strcat(buf, "\"); strcat(buf, argv[1]); int judgeDirResultCode = is_dir_exist(myFileBasePath); if (judgeDirResultCode == 0) { _finddata_t sfind; strcat(buf, "\*.txt"); long lresult = _findfirst(buf, &sfind); do { string path = sfind.name; path += '