第四次作业——结对编程
软件工程第三次作业:原型设计
这个作业属于哪个课程 | <18级软件工程基础> |
-|-|-
学生姓名 | 姚志昆
学号 | 201831081105
合作伙伴 | 吴昊阳
GitHub地址 | <第四次作业——结对编程克隆地址>
这个作业的要求在哪里 |<个人第4次作业:结对编程>
这个作业的目标的目标| 熟悉Github提交代码等基本操作,对词频统计应用的代码实现。
一、解题思路描述
刚刚看到这道题的时候的第一感觉是复杂。
1.首先是在数据的传入,可以是直接open文件,也可以是在运行窗口输入。
2.在创立一个单词的时候,他有两方面的信息,一是个数,二是单词内容,因此可以用结构体来存储其信息。
3.再者,由于单词的长度是不固定的,因此我们可以用vector动态数组对象a的方式来将单词的内容存入其中;
4.每次如果单词相同,则会将num加一,如过没有出现过,则会创建一个结构体,分别将他的单词内容和个数初始化,再将单词内容存储vector数组对象a中。
5.对于非英文字符的处理,可以直接将其去掉,即比较其ASC码,如果不属于‘a’<'char'<‘z’或者‘A’<'char'<‘Z’,则会将这个符号去除。
6.由于在要求中有“file123是一个单词,123file不是一个单词。file,File和FILE是同一个单词”的要求,因此处理方法可以是将所有的单词存储成同样的大小写,即将A~Z分别对于+32,达到转化为小写的目的。
7.输出时,为了方便记录结果,可以采用写入文件的方式,将每次的运行结果统计处理。
注:其他重叠部分已在伙伴博客中展示出,此篇博客后面不再一一赘述
二、个人代码书写
我们经过讨论分析后,决定先完成自己思路的函数关系和核心思想算法的实现之后,在进行项目整合,因此运行结果及其调试将会在结对伙伴博客中共同给出。
结构体的定义
9 {
10 string word;
11 int num;
12 };
创建一个vector数组a对象
vector<WORD> a; //创建vector对象,a[]
value函数的书写,对于新旧英文单词的处理方式
16 int&value(const string&s)
17 {
18 for(int i=0;i<a.size();i++)
19 if(s==a[i].word)
20 return a[i].num;
21 WORD p;
22 p.word=s;
23 p.num=0;
24 a.push_back(p); //在数组a最后添加数据
25 return a[a.size()-1].num;
26 }
对于非英文字符的处理
30 string str;
31 cout << "输入字符串:\n";
32 char c;
33 while(c=cin.get())
34 {
35 if((c>='a' && c<='z') || (c>='A' && c<='Z') || c==' ' || c=='\n')
36 str+=c; //去除符号
37 if(c=='\n')
38 break;
39 }
40 //输出去掉非英文字符的字符串
英文大小写的处理
42 for(int j=0;str[j]!='\0';j++)
43 {
44 if(str[j]>='A'&&str[j]<='Z')
45 {
46 str[j]+= 32; //大写字母Ascll码+32转换为小写
47 }
48 }
将结果记录并保存在内存中
string buf;
52 ofstream fout("D:\\123.txt"); //把转换好的字符串写入文件
53 fout<<str;
54 fout.close ();
55 ifstream fin("D:\\123.txt"); //读出写入的字符串并排序
56 while(fin>>buf){
57 value(buf)++;
58 }
59 vector<WORD>::const_iterator p; //迭代器访问元素
60 ofstream output("D:\\Result1.txt"); //定义输出文件名
61 for(p=a.begin();p!=a.end();++p)
62 output<<p->word<<":"<<p->num<<'\n'; //将结果输出保存到Result1.txt中
三、结对编程照片
由于思路因人而异,因此探讨是必然的;
图中为“ 对于我的疑惑,吴昊阳同学耐心的对我进行解说,让我们的思路一步步的叠合在一起。”
四、解决项目的收获
在这次作业的完成过程中,我受益匪浅,首先是对于基础知识的掌握,如vector的实际应用,以前仅仅局限于它是可以存储不同大小的数据,而这次实践,让我更深入了解了它,按照书上的内容,他的大小是在后面有大小个数的定义的,但是在这次试验中,我们将其大小没有初始化,而是由后面的输入个数来决定他的多少。而这次实验中我们也舍弃的很多的功能,比如输出频率最大的10个。结对编程过程中,我们分别纠正了自己对于题目理解的误区,比如对于非英文字母的处理、对文件操作的互相修正。让我体会到了结对编程的便利性、有效性,比如说我们遇到不会的地方,可以相互的讨论,取长补短,比如有一方出错的时候,另一方也可以及时的纠正,而且我发现,这样的做好处不止体现在作业中,生活中也同样如此。两个人配合的做事能够非常有效的提高效率,很多问题在短时间就得到了解决。通过这次的合作让我更能跟伙伴友好的相处,这是难能可贵的。总体而言两个人的编程1+1>2的,编代码的时间得到了大大的缩短,两个人的代码测试使得代码的结构更加的稳定,而且代码的编写更为规范。