软件工程第四次作业:结对编程
GIT地址 | ||
---|---|---|
学生姓名 | 吴昊阳 | |
学号 | 201831083104 | |
结对伙伴 | 姚志昆 | |
伙伴学号 | 201831081105 | |
伙伴博客地址 |
1.解题思路描述 |
要求是“统计指定单词的出现频率”,那么就是要解决两个问题: 找到指定单词和计数。我们设置了指针用来查找,在查找的同时用search进行统计计数。
刚开始,小组打算分工,分别查阅资料,思考不同阶段要求,伙伴成员协作完成。
对题目要求进行分析后,题目要求为词频统计,但是要求不少,小组决定先做基础要求。
尽量利用C++标准库的功能,利用正则表达式来提取出符合需求定义的单词,
每个单词应具有最简形式、已统计数量等属性,故采用结构体的形式存储。
行数统计:以按行读取的方式读取文本文件,每次成功读取后对应的counter+1,直至文件末尾。(统计文件的有效行数:任何包含非空白字符的行,都需要统计。)
字符数统计: 统计可打印字符个数
单词统计:根据要求,只有由至少4个英文字母打头的连续英文、数字字符串才算做一个单词,并且单词实体不区别大小写字母转换大小写;
保存字符长度>=4的单词-----------使用正则表达式;去掉开头非字符的单词并计数;排序,在自定义数据结构中重载<和<=,来实现词频排序,为了实现降序排序,简单地用大于号重载了小于号。
2.设计实现过程 |
代码主要分为三个部分:
1、创建一个结构体
struct WORD { /* 创建一个结构体 */
int count;
char s;
void exchange( Word &word ) /* 交换单词 */
{
string tStr = word.Str;
int tCount = word.Count;
word.Str = Str;
word.Count = Count;
Str = tStr;
Count = tCount;
}
};
} w[100];
2、判断是否是一个单词
bool isword( char a[] ) /* 判断是否是一个单词 */
{
int i = 0;
for ( i = 0; a[i] != '\0'; i++ )
if ( (a[i] >= 'a' && a[i] <= 'z') || (a[i] >= '0' && a[i] <= '9') )
return(true);
else
return(false);
}
3、主函数
int main( void )
{
char result[500];
char *ptr;
ifstream file( "c://A_Tale_of_Two_Cities.txt" ); /* 读取 */
if ( !file )
{
cout << "不能打开文件";
}
while ( !file.eof() )
{
file.getline( result, 500 );
}
file.close();
int j = 0; /* 大写转小写 */
while ( result[j] != '/0' && result[j + 1] != '/0' )
{
if ( result[j] >= 'A' && result[j] <= 'Z' )
{
result[j] = result[j] - 'A' + 'a';
j++;
}
}
cout << result;
char *sep = " ";
int i = 0;
ptr = strtok( result, " " ); /* 利用strtok函数来分割result字符串中的单词 */
while ( ptr != NULL )
{
if ( isword( p ) != false )
{
if ( judge( p, n ) != false )
{
w[n].s = *p; /* 赋值给数组 */
n++;
}
}
ptr = strtok( NULL, " " );
}
int t = 0;
ofstream outfile; /* 输出文件到result1 */
outfile.open( "Result1.txt" )
SortWordDown( w, count );
while ( w[t].s ) /* 输出统计结果 */
{
if ( strlen( w[t].s ) >= 4 )
{
outfile << w[t].s << ":" << w[t].count << '\n';
t++;
}
}
return(0);
}
3.性能分析 |
4.运行截图 |
5.分析结果 |
6.改进思路 |
对功能进行模块化。
后续任务:词组统计。可扫描单词数组,按连续指定窗口分割词组进行统计。
二丶分析及总结
1、针对某个问题的讨论决策过程:我们对API接口着重分析,我们两个也分成了两个方向进行研究,姚志昆主要针对类分装做一个接口在命令行进行输入参数;吴昊阳主要是想在web窗口上做一个接口进行输入参数。最终我们讨论的结果是还是在命令行上进行输入参数做一个接口。
2、评价对方:请评价一下你的合作伙伴,又哪些具体的优点和需要改进的地方。 这个部分两人都要提供自己的看法。
姚志昆:吴昊阳非常循循善诱,我不会的地方很耐心的指导,善于思考并且能付诸行动,希望对git指令了解更多。
吴昊阳:姚志昆非常认真,非常负责任,C++的基础也是相当不错的,对于新接触的知识,立刻会付出行动进行验证,对我们的结对编程做出了巨大的贡献。
3、评价整个过程:关于结对过程的建议
结对编程不仅考研了编程能力,也考验了合作能力,我们在编程过程中相互鼓励,分工合作,因为一旦某个功能实现不了,一个人的话很容易暴躁,自闭。两个人可以相互鼓励,也同时形成一种良性竞争,比如这个方法是其中一个人想出来的,另一个人就会去思考有没有更快的方法。希望有机会可以再次结对编程。
结对编程照片:
posted on
2019-10-12 11:31 CharlieWhy 阅读(
...) 评论(
...) 编辑 收藏
|