wc.exe

github地址: https://github.com/JovanW/wordcount

1. PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 20 20
Estimate 估计这个任务需要多少时间 20 20
Development 开发 1070 1005
Analysis 需求分析 (包括学习新技术) 60 40
Design Spec 生成设计文档 40 40
Design Review 设计复审 (和同事审核设计文档) 30 40
Coding Standard 代码规范 (为目前的开发制定合适的规范) 30 30
Design 具体设计 60 45
Coding 具体编码 400 360
Code Review 代码复审 30 25
Test 测试(自我测试,修改代码,提交修改) 200 150
Reporting 报告 120 150
Test Report 测试报告 30 25
Size Measurement 计算工作量 30 20
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 40
合计 1070 1005

2. 解题思路

  • wordcount.exe的基本功能是统计文本文件的字符数、单词数和行数,因此需要三个不同的命令来实现这些功能。在命令行窗口使用'-c'/'-w'/'-l'命令时,程序会调用随后路径中的文件并完成与命令相对应的功能。因此,我根据数组argv[2]中的字符串来区别不同的命令,然后再根据字符、单词以及行数各自的特征来实现统计。

3. 代码说明

- 统计字符数 '-c':

		case 'c':
			{
				while( !feof(fp) )							//读取文件直到左后一个字符
			    	{
				        char a = fgetc(fp);						//大循环来返回每读取的一个字节
				        if( a!=' ' && a!='\n' && a!='\t' && a!=',' && a!='.' && a!='!' && a!=';' && a!='=' )
			            	c++;								//字符数加一
			        }
			        c--;
			        printf( "the number of characters:%d\n", c);
			        break;
			}
  • feof(fp)读取文件直到文件末尾,当检测到的字符不是特殊字符的时候,字符数加一;由于文件末尾有EOf,字符数会多加了1,因此在最后减去1。

- 统计单词数 '-w':

case 'w':
{
	char a =fgetc(fp);
	while( a != EOF)
	{
		if( (a >='a' && a <='z') || ( a >='A' && a <='Z') || ( a >='0' && a <='9') )
		{
		 	while((a >='a' && a <='z') || ( a >='A' && a <='Z') || ( a >='0' && a <='9'))
				a =fgetc(fp);
		 	w++;
		 	a =fgetc(fp);
		}
		else
		a =fgetc(fp);
	}
	printf("the number of words:%d\n",w);
	break;
}
  • 统计单词数的方法是:检测到字幕或者数字时,用一个循环查找其后的第一个特殊符号,此时单词数就加一。这就是统计单词的思想。

统计行数 '-l':

case 'l':
		{
			while( !feof(fp) )							//读取文件直到左后一个字符
			{
				  char a = fgetc(fp);					//大循环来返回每读取的一个字节
				  if( a=='\n')
            			l++;							//行数加一
            }
            l++;
            printf( "the number of linies:%d\n", l);
            break;
         }
  • 统计行数的方法:当查找到换行符的时候,行数加一;由于最后一行没有换行符,在之前的算法里面也没有统计到最后一行,因此最后加上1作为最后的一行的行数即可。

4. 测试

1.空文件


2.只有一个字符的文件


3.只有一个词的文件


4.只有一行的文件


5.一个典型的文件

具体见源代码。

5. 总结

  • 从得知题目开始就知道这个作业需要我话很多时间和精力来做,果然,事实的确如此。从写这个小工具中我发现任何时候自己都有可能会出错,一定不能过分的自信,一次次重想,一次次重写,都会花费自己更多的时间。最后希望自己能真正是学习到了一点儿东西。
posted @ 2018-09-14 20:16  wzf5156  阅读(83)  评论(0编辑  收藏  举报