C语言实现WC

项目要求

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;
}

六、测试用例

七、测试结果

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

posted @ 2018-09-15 01:26  csbyr  阅读(648)  评论(0编辑  收藏  举报