wc

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

用户需求

  程序员处理需求的模式为:wc.exe [paramter][file_name]

  各个参数的意义:

  基本功能列表:wc.exe -c file.c:char count;

         wc.exe -w file.c:char count;

         wc.exe -l file .c:line count;

  扩展功能:-s 递归处理目录下符合条件的文件

       -a 返回高级选项(代码行、空行、注释行)

        空行:本行全部是空格或者格式控制字符,如果包括代码,则只有不超过一个可显示的字符,例如“}”

        代码行:本行包括多于一个字符的代码。

        注释行:本行不是代码行,并且本行包括注释,例如:}//注释。这种情况下,这一行属于注释行。

        [file_name]:文件的目录名,可以处理一般通配符。

        文本文件,确定字/词/句

  高级功能:-x参数 这个参数单独使用,如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等信息。

需求举例:wc.exe -s -a *.c  返回当前目录、子目录所有.c文件的代码行数,空行数,注释行数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
 
int charcalculate=0;
 
int wordcalculate=0;
 
int linecalculate=0;
 
void calculate(char * file)
{
    FILE * fp;
    char a;
    if((fp=fopen(file,"r"))==NULL)
    {
        printf("read file failed!\n");
        exit(-1);
    }
    while(!feof(fp))
    {
        a=fgetc(fp);
        if(a!=' '&&a!='\n'&&a!='\t'&&a!=','&&a!='.'&&a!='!'&&a!=';'&&a!='=')
            charcalculate++;
        if(a==' '||a=='\n'||a=='\t'||a==','||a=='.'||a=='!'||a=='='||a==';')
            wordcalculate++;
        if(a=='\n'||a=='\t')
            linecalculate++;
    }
    linecalculate++;
    charcalculate--;         
    fclose(fp);
}
 
int main(int argc, char* argv[])             
{
    FILE *fp;
 
    calculate(argv[2]);
    while(1)
    {
        if((fp=fopen(argv[2],"r"))==NULL)
        {  
        printf("FileNull\n\n\n");
        scanf("%s%s%s",argv[0],argv[1],argv[2]);
        continue;
        }
        else if(!strcmp(argv[1],"-c"))                 
            printf("File:%sCharNum:%d\n",argv[2],charcalculate);
        else if(!strcmp(argv[1],"-w"))                  
            printf("File:%sWordNum:%d\n",argv[2],wordcalculate);
        else if(!strcmp(argv[1],"-l"))                
            printf("File:%sLineNum:%d\n",argv[2],linecalculate);
        else if(!strcmp(argv[1],"exit"))
        {
            printf("Exit!\n");
            break;
        }
        else
            printf("NullPoint\n");
        printf("\n\n");
        scanf("%s%s%s",argv[0],argv[1],argv[2]);
    }
    return 0;
     
}

  这个程序我分了两部分,一部分是主函数,负责打开对应文件和执行对应的命令。另一部分是计数部分,根据所发命令输出对应的统计结果。

下面是我程序的执行结果。对应的TXT是随便在电脑里找的readme文件。

原文地址:https://www.cnblogs.com/hcwys/p/7608953.html