目的与要求
- 代码复审练习
- 结对练习
- 编写单元测试
- 基于作业3的结果,读取一个较小的文本文件,统计该文件中的单词的频率,并将统计结果输出到当前目录下的 Result1.txt 文件。 (第一阶段初稿完成该要求)
- 命令行格式: 提示符> Myapp.exe -f filename.txt > Result.txt (PS:C++ 程序,Java 程序输出方式类似) filename.txt 为前面下载的文件名。
- 解释:
- 选项 -f 表示后面跟文件名
- 输出格式规定(参考中的示例):
- 首先按照频率由高到低排序
- 频率一样的词, 按照字典顺序排序
- 此外, 读取一个较大的文本文件实验对比程序执行效率,做如下改进,比较改进前后程序执行时间。
详细内容
- 开发语言:C++
- 开发工具:Codeblocks
- 结对伙伴:陈俊宇
- 准备工作:
- 思路:
基于上一个 个人项目 - 词频统计 的程序和结果,将本次所需的文件放在指定的地址上,统计该文件中的单词的频率,并使用文件流的写入将结果写入文件。
2. 分工:
我负责主要大框架的编写,我的小伙伴负责在这个框架里细化逻辑与语法语句的关系。
- 源代码
#include#include #include #include using namespace std;void screen(int chioce) //对内容进行筛选{ char input[50][50],newinput[50][50],newopen[100]; char *open; if(chioce==1) //以输入方式对字符串进行存储与筛选 { cout<<"请输入一串字符串,以回车键作为结束:"; for(int m=0;input[m]!='\0';m++) //将字符串以二维字符数组的形式储存起来 { for(int n=0;input[n]!='\0';n++) { cin>>input[m][n]; } } for(int m=0;input[m]!='\0';m++)//将输入的字符串的大写转换为小写 { for(int n=0;input[m][n]!='\0';n++) { if(input[m][n]>='A'&&input[m][n]<='Z'&&strlen(input)>=4) //限制字符串大小为4 { int i=0,j=0; newinput[i][j]=toupper(input); } } } sta(newinput,m*n); } else //以录入方式对字符串进行存储与筛选 { int i=0,n; ifstream open("D:\\A_Tale_of_Two_Cities.txt"); open=new int[n]; while(open>>open[i],strlen(open)>=4) //字符串大于4的才给予储存的机会 { newopen[i]=toupper(open); //大写转换成小写 i++; } sta(newopen,i); }}void sta(char word[],int wordnum[]) //统计单词出现的次数{ char newword[],newwordnum[]; cout<<"统计的单词出现的次数如下:\n"; for(int i=0;;i++) { for(int j=0;if(strcmp(newword[i],word[j]));j++) { newwordnum[i]++; } cout< <<'\t'< < >chioce; if(chioce==1||chioce==2) //用户选择 { screen(chioce); } ofstream outfile; //用文件流写入文件结果 outfile.open( "Result1.txt" ) return 0;}
- 运行结果
- 小结
第一次尝试与其他人一起结对编程,对于一个人的编程,两个人更明显的可以互相交流和弥补双方的缺点和弱势。
对于在原来程序上完善和原数据上的变动更得心应手了。
- 源代码Github地址