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来进行输入输出的时候一直报错,还一直找不出原因,心情有点糟。不过后面写算法的时候还是挺顺畅的嘻嘻。
  • 相关阅读:
    Algorithm Gossip (48) 上三角、下三角、对称矩阵
    .Algorithm Gossip (47) 多维矩阵转一维矩阵
    Algorithm Gossip (46) 稀疏矩阵存储
    Algorithm Gossip (45) 费氏搜寻法
    Algorithm Gossip (44) 插补搜寻法
    Algorithm Gossip (43) 二分搜寻法
    Algorithm Gossip (42) 循序搜寻法(使用卫兵)
    Algorithm Gossip (41) 基数排序法
    Algorithm Gossip (40) 合并排序法
    AlgorithmGossip (39) 快速排序法 ( 三 )
  • 原文地址:https://www.cnblogs.com/hjj455/p/9631596.html
Copyright © 2011-2022 走看看