C语言实现WC
项目要求
Github:https://github.com/YgR9710/c-WordCount
一、基本功能
- 统计文件字符数 -c (实现)
- 统计文件词数 -w (实现)
- 统计文件行数 -l (实现)
二、扩展功能
- 递归处理目录下符合条件的文件。 -s (未实现)
- 返回更复杂的数据(代码行 / 空行 / 注释行)。
三、高级功能
-
基本的Windows GUI 程序操作
支持通过图形界面选取文件 -x (未实现)
支持通过图形界面展现文件的信息
四、设计思路
由于只实现了基本功能,因此不需要太过于复杂的设计。针对不同的功能设计一个函数去实现即可。
五、具体实现
1、统计字符数代码
int charCounter(char *fName)
{
FILE *fp;
if((fp=fopen(fName,"r"))==NULL)
{
printf("CAN'T OPEN THE FILE");
exit(0);
}
char ch;
int cCount=0;
while(!feof(fp))
{
ch=fgetc(fp);
if(ch!=EOF)cCount++;
}
fclose(fp);
return cCount;
}
2、统计词数代码
int wordCounter(char *fName)
{
FILE *fp;
if((fp=fopen(fName,"r"))==NULL)
{
printf("CAN'T OPEN THE FILE");
exit(0);
}
char ch1,ch2;
int n=1;
int wCount=0;
while(!feof(fp))
{
ch1=fgetc(fp);
if(n==1)
{
if(ch1!=' '&&ch1!='\n'&&ch1!='\''&&ch1!='\"'&&ch1!='\?'&&ch1!='\\'&&ch1!='\a'
&&ch1!='\b'&&ch1!='\f'&&ch1!='\r'&&ch1!='\t'&&ch1!='\v'&&ch1!=EOF)
{
wCount++;
}
n--;
ch2=ch1;
continue;
}
if(ch1!=' '&&ch1!='\n'&&ch1!='\''&&ch1!='\"'&&ch1!='\?'&&ch1!='\\'&&ch1!='\a'&&ch1!='\b'
&&ch1!='\f'&&ch1!='\r'&&ch1!='\t'&&ch1!='\v'&&ch1!=EOF&&(ch2==' '||ch2=='\n'))
{
wCount++;
}
ch2=ch1;
}
fclose(fp);
return wCount;
}
3、统计行数代码
int lineCounter(char *fName)
{
FILE *fp;
if((fp=fopen(fName,"r"))==NULL)
{
printf("CAN'T OPEN THE FILE");
exit(0);
}
char ch;
int n=1;
int lCount;
while(!feof(fp))
{
ch=fgetc(fp);
if(n==1)
{
if(ch==EOF)lCount=0;
else lCount=1;
n--;
}
if(ch=='\n')
{
lCount++;
}
}
fclose(fp);
return lCount;
}
六、测试用例
七、测试结果
八、PSP
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
20 |
30 |
· Estimate |
· 估计这个任务需要多少时间 |
30 |
60 |
Development |
开发 |
360 |
600 |
· Analysis |
· 需求分析 (包括学习新技术) |
60 |
120 |
· Design Spec |
· 生成设计文档 |
30 |
60 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
20 |
20 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
20 |
20 |
· Design |
· 具体设计 |
60 |
60 |
· Coding |
· 具体编码 |
120 |
360 |
· Code Review |
· 代码复审 |
30 |
30 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
60 |
120 |
Reporting |
·报告 |
60 |
120 |
· Test Report |
· 测试报告 |
30 |
60 |
· Size Measurement |
· 计算工作量 |
30 |
60 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
30 |
60 |
合计 |
|
620 |
1150 |
九、总结
这次的项目设计虽然基本功能不太难实现,但是由于采用的是c语言,所以在扩展功能与高级功能的部分处理起来十分麻烦,因此在知识有限的情况下便没有继续去实现。总的来说这种类型的项目能够使我们系统地去分析需求、设计和实现功能,对我们是一次很好的锻炼机会和经验积累,有助于我们更高效地去完成任务。