软工第二次作业

github


解题思路
刚拿到题目,我先看了几遍,大致的了解题目的含义。因为有些工具不会使用,如vs2017,我就先去学习工具的使用了。从工具的配置以及大致的使用过程,我都通过上网查资料以及询问同学。查资料以及学习资料的过程花费了我不少的时间,但有很大的收获,起码我些许懂得如何使用当下最时髦的编译软件。至于编码,因为我的代码能力较弱,我一开始没有自己动手打,而是去网上找了一个和题目有相似性的c代码,自己再将c改成了c++,还补充了一些功能上去,虽然还是有bug,但是编译过了,我也有些许安慰。

设计实现过程
以下是我的流程图

单元测试功能因为代码有bug,然后没有通过,不过知道怎么设置附加依赖项。

性能分析
由于自己水准不够,代码没有实现全部的功能,所以我就只是尝试了一下什么是性能分析功能,不过我会利用课余时间,拿一段简单易实现的代码,去测试一下分析功能。

代码说明

void readfile(struct word * &head)
	{
		FILE *fp;
		linecount l;![](https://images2018.cnblogs.com/blog/1092899/201809/1092899-20180912203349918-1068576763.png)


		if ((fp = fopen("in.txt" ,"r") )== NULL)
		{
			printf("无法打开此文件!
");
			exit(0);
		}
		while (!feof(fp))
		{
			int i = 0;
			ch = fgetc(fp);
			if (ch != 32 && ch != 10 && ch != 9) flag1 = 1;
			temp[0] = ' ';                                //保证单词的开始一定是有效字符 
			do
			{
				charnum++;                              //统计字符数 
				if (ch >= 'a'&&ch <= 'z' || ch >= 'A'&&ch <= 'Z' || ch >= '0'&&ch <= '9')
				{
					if (ch >= 'A'&&ch <= 'Z')                //大写化小写 
					{
						temp[i] = ch - 32;
						i++;
					}
					else
					{
						temp[i] = ch;
						i++;
					}
					if (i <= 3 && ch >= '0'&&ch <= '9')  flag = 0;   //如果字符序列前四个有数字则不算单词 
				}
				ch = fgetc(fp);
				if (ch != 32 && ch != 10 && ch != 9) flag1 = 1;
				if (ch = 10)
				{
					l.line(flag1);
					flag1 = 0;
				}
				if (feof(fp))
				{
					charnum--;                            //多加了一个EOF 
					break;
				}
			} while (ch >= 'a'&&ch <= 'z' || ch >= 'A'&&ch <= 'Z' || ch >= '0'&&ch <= '9' || temp[0] == ' ');
			charnum++;
			temp[i] = '';
			p = head->next;
			while (p)                                
			//旧单词,词频加1 
			{
				if (!strcmp(temp, p->name))
				{
					p->num++;
					wordnum++;
					break;
				}
				p = p->next;
			}
			if (!p&&temp[0] != ''&&flag == 1)                      
			//新单词存入链表
			{
				p = new word;
				strcpy_s(p->name, temp);
				p->num = 1;
				wordnum++;
				p->next = head->next;
				head->next = p;
			}
			flag = 1;
		}
	}
};

以上就是我的核心代码。我的思路是通过逐个字符的读取文本文件,将相似于单词的字符串存入一个字符数组,然后在通过一个判断,判断这个字符串是不是单词,是就存储进结构体链表中。

心得体会
这次的实践,由于c++使用的较少,然后也是初次使用vs2017,我的代码实现挺糟糕的,只完成字符的统计功能。如果是用c写的话到可以完成全部的功能,由于时间问题我是不能在deadline之前实现全部功能,之后自己会找时间改进自己的代码,让自己能收获到更多,总之让我自己意识到自己的代码水平有很大的进步空间。然后就是上网学习资料,我觉得这获得知识都是比较实用,多看看别人的博客对自己也是有很大的提升。还有就是以前从来没有很系统的为一道题目做很系统的安排计划,这次实践让我感觉到有一个系统的过程会省事h很多。

原文地址:https://www.cnblogs.com/onezya/p/9637181.html