福大软工第二次作业
一、项目地址
https://github.com/396406412/personal-project
二、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 10分钟 | 30分钟 |
· Estimate | · 估计这个任务需要多少时间 | 6小时 | 11小时 |
Development | 开发 | 2小时 | 4小时 |
· Analysis | · 需求分析 (包括学习新技术) | 2小时 | 4小时 |
· Design Spec | · 生成设计文档 | 10分钟 | 20分钟 |
· Design Review | · 设计复审 | 10分钟 | 2分钟 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30分钟 | 40分钟 |
· Design | · 具体设计 | 5分钟 | 10分钟 |
· Coding | · 具体编码 | 2小时 | 6小时 |
· Code Review | · 代码复审 | 1小时 | 3小时 |
· Test | · 测试(自我测试,修改代码,提交修改) | 1.5小时 | 2小时 |
Reporting | 报告 | 2小时 | 3小时 |
· Test Repor | · 测试报告 | 0.5小时 | 15分钟 |
· Size Measurement | · 计算工作量 | 5分钟 | 3分钟 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10分钟 | 10分钟 |
| | 合计 |10小时 |13小时
三、思路描述
刚开始拿到题目的时候,想的是不就是统计字符跟单词的个数,简单,以前做过类似的。本来想用JAVA写的,但是没怎么用过JAVA,尝试着用JAVA写了后放弃了,,根本不会ORZ,后来老老实实用比较熟悉的C++写,首先第一个要解决的问题就是不会如何读入文件,后来百度了一下才知道用fstream头文件,又瞄了眼别人做好的代码算法思路,在心里自己大概知道哪里怎么样怎么样,便开始自己埋头写了。
四、设计实现过程
1.首先肯定先意识到会创建一个结构体,来保存已知的单词,方便后面统计单词出现的频率以及用sort函数对其进行排序(这里还需要对sort的第三个参数进行重新编码,来保证排序的顺序,然后差点忘记第二个参数的地址要到尾地址的下一个地址)
2.函数肯定会有大写转为小写和如何对重复的单词进行统计数量。
3.一个最主要的算法,那就是判断是否是一个单词,如何把这个单词完整地存入先前写好的结构体。
五、
六、代码说明
bool cmp(danci x, danci y)//这个是sort的第三个参数的函数。
{
if (x.num1 > y.num1)
return true; //如果词的频率比较大,直接返回
else if (x.num1 == y.num1)
{
if (x.content>y.content)return false;
else return true;//如果两个词的频率一样大,则需要按字典序排序,这里直接用string比较
}
else
return false;//如果词的频率比较小,直接返回
}
while (getline(file, d))//这段是最主要的算法部分,这里得到每一行的字符串
{
linenum = d.size() + 1;//每行的字符数量,+1是+的换行符
if (linenum != 1)
{
linenumber++;
}//这个是有效行的数量
count += linenum;
bigtosmall(d);//大写转成小写
//cout << count<<" "<<linenumber<<" "<<d << endl;
for (i = 0; i < d.size(); i++)
{
if (d[i] >= 'a'&&d[i] <= 'z')//找到第一个小写字母,开始继续往下找
{
size = 0;
pp[size] = d[i]; size++;
for (j = i + 1; j < d.size(); j++)
{
if(d[j]>='a'&&d[j]<='z')
{
//cout << d[j];
pp[size] = d[j];
size++;
}
else
{
break;
}
}//找到不是小写字母的字符,记下已经找到了几个连续的小写字母,size
//cout << pp << endl;
if (size >= 4)//大于等于4,则可以构成一个单词
{
for (r = j; r < d.size(); r++)//找不是小写字母的字符,比如123456789。,?,能和小写字母连起来一起构成单词的字符,然后把单词赋给结构体数组
{
if (d[r] != ' ')
{
pp[size] = d[r]; size++;
}
else
{
i = r; pp[size] = '\0';
word[num].content = pp;
break;
}
if (r == d.size() - 1)
{
pp[size] = '\0';
word[num].content = pp; i = r;
}
}
if (j >= d.size())
{
i = j; pp[size] = '\0';
word[num].content = pp;
}
num++;
}
else
{
i = j;
}
}
}
}
for (i = 0; i < num; i++)//这里是词频统计
{
if (word[i].flag == 0)
{
continue;
}//flag的功能是对已经统计过的单词不需要再进行统计,直接PASS跳
for (j = 0; j < num; j++)
{
if (i == j)continue;
if (word[i].content == word[j].content)
{
word[i].num1++;
word[j].flag = 0;
}
}
}
七、心路历程与收获
收获1.如何将文件中的内容读入
收获2.更善于对自己的项目进行总结和规划
心路历程:还是等熟练了某种语言后再拿来写项目吧。。。然后一开始用CMD来进行输入输出的时候一直报错,还一直找不出原因,心情有点糟。不过后面写算法的时候还是挺顺畅的嘻嘻。