第四次作业——结对编程

软件工程第三次作业:原型设计

这个作业属于哪个课程 | <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的,编代码的时间得到了大大的缩短,两个人的代码测试使得代码的结构更加的稳定,而且代码的编写更为规范。

posted @ 2019-10-12 11:23  Anthonyzk  阅读(184)  评论(1编辑  收藏  举报