福大软工第二次作业

一、项目地址

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来进行输入输出的时候一直报错,还一直找不出原因,心情有点糟。不过后面写算法的时候还是挺顺畅的嘻嘻。
posted @ 2018-09-12 22:52  何劫劫  阅读(136)  评论(0编辑  收藏  举报