结对项目:单词计数

博客分享了一次结对项目——单词计数的完成情况,提到了未实现图形界面和递归处理的问题。作者指出由于对新知识的学习难度预估不足及时间管理不当,导致项目未达预期目标。
摘要由CSDN通过智能技术生成

项目1: WordCount (单词计数)

1.1 项目要求
wc.exe是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc exe的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。
实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。

具体功能要求:

程序处理用户需求的模式为:
wc.exe [ parameter] [file_ name]

基本功能列表:
wc.exe -c file.c
//返回文件file.c的字符数
wc.exe -W file.c
//返回文件file.c 的词的数目
wc.exe -1 file.c
//返回文件file.c的行数

扩展功能:
-s:递归处理目录下符合条件的文件。
-a:返回更复杂的数据(代码行/空行/注释行)。

空行:本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的字符,例如“{”。
代码行:本行包括多于一个字符的代码。
注释行:本行不是代码行,并且本行包括注释。一个有趣的例子是有些程序员会在单字符后面加注释:
  } //注释
在这种情况下,这一行属于注释行。

  高级功能:
-x参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。
需求举例:
  wC.exe -s -a *.c
返回当前目录及子目录中所有*.c文件的代码行数、空行数、注释行数。

1.2标准测试集,  正确性和速度评比
以子目录的形式把目前所有同学的程序都集中在一个总的测试目录下,作为测试集合。然后大家看看各自的程序要花多少时间才能正确并且较快地完成任务。在这里,同学们要记下满足了标准测试集之后,每人实际花费的时间[实际值],并且按照附录中PSP的表格统计自己在软件开发的各个阶段所花费的时间。

代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
FILE *f;
int countw(char v3[100])
{
	f = fopen(v3, "r");
	int cword = 0;
	char a;
	while (!feof(f))
	{
		a = fgetc(f);
		if (a == ' ' || a == '\n' || a == '\t' || a == ',' || a == '.' || a == '!' || a == '=' || a == ';')
			cword++;
	}
	printf("word numbers is %d", cword);
	fclose(f);
	return 1;
}
int countc(char v3[100])
{
	f = fopen(v3, "r");
	int cchar = 0;
	char a;
	while (!feof(f))
	{
		a = fgetc(f);
		if (a != ' '&&a != '\n'&&a != '\t')
			cchar++;
	}
	cchar--;
	printf("char numbers is %d", cchar);
	fclose(f);
	return 1;
}
int countl(char v3[100])
{
	f = fopen(v3, 'r');
	int cline = 0;
	char a;
	while (!feof(f))
	{
		a = fgetc(f);
		if (a == '\n')
			cline++;
	}
	cline++;
	printf("line numbers is %d", cline);
	fclose(f);
	return 1;
}
int counta(char v3[100])
{
	f = fopen(v3, "r");
	int ca1 = 0,ca2 = 0,ca3 = 0;
	int c1, c2, c3;
	int flag = 0;
	char a;
	while (!feof(f))
	{
		c1 = 0;
		c2 = 0;
		c3 = 0;
		while (!feof(f))
		{
			flag = 0;
			a = fgetc(f);
			if (a == ' ' || a == '\t')
				c2++;
			else if (a == '\n')
			{
				if (c1 == 0 && c3 == 0)
					ca2++;
				else ca1++;
			}
			else if (a == '\\')
			{
				a = fgetc(f);
				if (a == '\\')
					c3++;
				if (c1 == 0 || c1 == 1)
				{
					ca3++;
					while (!feof(f))
					{
						a = fgetc(f);
						if (a == '\n')
							break;
					}
					flag = 1;
					break;
				}
			}
		}
	}
	if (flag == 0)
		if (c1 == 0)
			c2++;
		else c1++;
	printf("代码行数:%d", ca1);
	printf("空行数:%d", ca2);
	printf("注释行数:%d", ca3);
}
int countx(char v3[100])
{

}
int main()
{
	char v1[100], v2[100], v3[100];
	int i, j, k;
	while (scanf("%s%s%s",&v1, &v2, &v3)!=EOF);
	{
		if (!strcmp(v2, '-c'))
			conutc();
		else if (!strcmp(v2, '-w'))
			countw(v3);
		else if (!strcmp(v2, '-l'))
			countl(v3);
		else if (!strcmp(v2, '-a'))
			counta(v3);
		else if (!strcmp(v2, '-x'))
			countx(v3);
	}

}

GitHub:https://github.com/yjsnpi1919/Testandhomework

单词计数项目PSP表格:


总结:

未能实现图形界面以及递归处理功能。主要是由于开始对新知识学习难度估计不足以及对时间的把控不够,以至于未能达到预期的效果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值