C语言实现WC

时间:2022-10-17 23:27:15

项目要求

Github:https://github.com/YgR9710/c-WordCount

一、基本功能

  1. 统计文件字符数  -c  (实现)
  2. 统计文件词数     -w    (实现)
  3. 统计文件行数      -l  (实现)

二、扩展功能

  1. 递归处理目录下符合条件的文件。                             -s          (未实现)
  2. 返回更复杂的数据(代码行 / 空行 / 注释行)。

三、高级功能

  1. 基本的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; }

六、测试用例

C语言实现WC

七、测试结果

C语言实现WC

八、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语言,所以在扩展功能与高级功能的部分处理起来十分麻烦,因此在知识有限的情况下便没有继续去实现。总的来说这种类型的项目能够使我们系统地去分析需求、设计和实现功能,对我们是一次很好的锻炼机会和经验积累,有助于我们更高效地去完成任务。