zoukankan      html  css  js  c++  java
  • 福大软工第二次作业

    一、项目地址

    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] = '';
    							word[num].content = pp;
    							break;
    						}
    						if (r == d.size() - 1)
    						{
    							pp[size] = '';
    							word[num].content = pp; i = r;
    						}
    					}
    					if (j >= d.size())
    					{
    						i = j; pp[size] = '';
    						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来进行输入输出的时候一直报错,还一直找不出原因,心情有点糟。不过后面写算法的时候还是挺顺畅的嘻嘻。
  • 相关阅读:
    P1093 奖学金
    『模板』快速排序
    [模板]选择排序&&冒泡排序&&插入排序
    CF898A Rounding
    计算细胞数【BFS】
    字符串匹配问题(lfyzoj)
    [HDU]4694 Important Sisters(支配树)
    [BZOJ]4650: [Noi2016]优秀的拆分
    [BZOJ]4908: [BeiJing2017]开车
    [洛谷]P3729 曼哈顿计划EX(最小割树/等价流树)
  • 原文地址:https://www.cnblogs.com/hjj455/p/9631596.html
Copyright © 2011-2022 走看看