wc.exe

Posted ftsprimadonna

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wc.exe相关的知识,希望对你有一定的参考价值。

 

github地址:https://github.com/weirdo111/wc.git

WC项目要求

 wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。

实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。
具体功能要求。

 

基本功能列表:

wc.exe -c file.c     //返回文件 file.c 的字符数(实现)

wc.exe -w file.c    //返回文件 file.c 的词的数目(实现)

wc.exe -l file.c      //返回文件 file.c 的行数(实现)

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

 

解题思路

刚开始拿到题目时,决定用c语言实现。看了题目要求后,根据不同功能设计功能函数,用主函数调用实现。

 

设计实现过程

     设计了6个功能函数,分别用来实现字符数、单词数、行数、空行数、注释行、代码行。其中统计代码行的函数还调用了空行和注释行的函数。

 

遇到的问题和解决方法

困难描述:在设计单词统计行时,在单词间隔方面遇到了困难

做过的尝试:查询c的相关书籍

是否解决:是。

 

PSP

 

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

10

10

· Estimate

· 估计这个任务需要多少时间

600

560

Development

开发

20

30

· Analysis

· 需求分析 (包括学习新技术)

120

140

· Design Spec

· 生成设计文档

30

25

· Design Review

· 设计复审 (和同事审核设计文档)

5

6

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

30

40

· Design

· 具体设计

30

35

· Coding

· 具体编码

500

400

· Code Review

· 代码复审

80

180

· Test

· 测试(自我测试,修改代码,提交修改)

60

80

Reporting

报告

60

70

· Test Report

· 测试报告

30

30

· Size Measurement

· 计算工作量

5

5

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

10

10

合计

 

1590

1621

 

 

代码说明

字符统计

 1  int charcount(char *filename)//统计字符数
 2 {
 3     int n1=0;
 4     char ch;
 5     FILE *fp;
 6     if((fp=fopen(filename,"r"))==NULL)
 7     {
 8         exit(-1);
 9     }
10     ch=fgetc(fp);
11     while(!feof(fp))
12     {
13         ch=fgetc(fp);
14         n1++;
15     }
16     fclose(fp);
17     return n1;
18 }

单词统计

 1 int wordcount(char *filename)//统计单词数
 2 {
 3     int n2=0,word=0;
 4     char ch;
 5     FILE *fp;
 6     if((fp=fopen(filename,"r"))==NULL)
 7     {
 8         exit(-1);
 9     }
10     ch=fgetc(fp);
11     while(!feof(fp))
12     {
13         ch=fgetc(fp);
14         if(ch<A||(ch>Z&&ch<a)||ch>z)
15             word=0;
16         else if(word==0)
17         {
18             word=1;
19             n2++;
20         }
21     }
22     fclose(fp);
23     return n2;
24 }

行数统计

int linecount(char *filename)//统计行数
{
    int n3=0;
    char ch,lc=0;
    FILE *fp;
    if((fp=fopen(filename,"r"))==NULL)
    {
        exit(-1);
    }
    ch=fgetc(fp);
    while((ch=fgetc(fp))!=EOF)
    {
        if(ch==
)
            n3++;
        lc=ch;
    }
    fclose(fp);
    if(lc!=
)
        n3++;
    return n3;
}

主函数控制

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main()
 5 {
 6  int charcount(char *filename);
 7  int wordcount(char *filename);
 8  int linecount(char *filename);
 9  int emplinecount(char *filename);
10  int comlinecount(char *filename);
11  int codelinecount(char *filename);
12  FILE *fp;
13  int c_count,w_count,l_count,e_count,cm_count,cd_count;
14  char ch[3],filename[100];
15  printf("输入用户命令.exe ");
16  scanf("%s %s",ch,filename);
17  if((fp=fopen(filename,"r"))==NULL)
18  {
19      printf("filenull.
");
20      exit(-1);
21  }
22  //获取命令和输出
23  if(ch[1]==c)
24  {
25     c_count=charcount(filename);
26     printf("charcalculate=%d
",c_count);
27  }
28  if(ch[1]==w)
29  {
30     w_count=wordcount(filename);
31     printf("wordcalculate=%d
",w_count);
32  }
33  if(ch[1]==l)
34  {
35     l_count=linecount(filename);
36     printf("linecalculate=%d
",l_count);
37  }
38  if(ch[1]==a)
39  {
40      e_count=emplinecount(filename);
41      cm_count=comlinecount(filename);
42      cd_count=codelinecount(filename);
43      printf("emptyline=%d
commentline=%d
",e_count,cm_count,cd_count);
44  }
45     return 0;
46 }

测试运行 

 空文件:

技术分享图片

技术分享图片

只有一个字符的文件

技术分享图片

技术分享图片

只有一个单词的文件

技术分享图片

 

技术分享图片

 

 

只有一行的文件 

技术分享图片

技术分享图片

 

一个典型的源文件

技术分享图片

 技术分享图片

项目小结

    在这次项目中,我学习到了一些新的知识,在写代码过程中,经常被一些小细节给绊住,而且这些细节需要认真思考才能修改出来。另外,扩展功能-a的代码虽然写了,但不能运行。





以上是关于wc.exe的主要内容,如果未能解决你的问题,请参考以下文章

第二次,模仿wc.exe的功能

wc.exe

wc.exe 功能实现

java实现wc.exe的基本功能

个人项目:实现wc.exe(Java)

软件工程第二周 WC程序