wc.exe

项目要求

Github:https://github.com/qywxc/wc.exe

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

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

wc.exe [parameter] [file_name]

基本功能列表:

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

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

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

扩展功能:
-s 递归处理目录下符合条件的文件(未实现)
-a 返回更复杂的数据 (未实现)

PSP

 

    PSP Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 40
Estimate 估计这个任务需要多少时间 15 20
Development 开发 400 500
Analysis 需求分析(包括学习新技术) 150 180
Design Spec 设计生成文档 10 20
Design Review 设计复审 (和同事审核设计文档) 5 10
Coding Standard 代码规范 (为目前的开发制定合适的规范) 20 30
Design 具体设计 70 120
Coding 具体编码 300 420
Code Review 代码复审 20 50
Test 测试(自我测试,修改代码,提交修改) 60 90
Reporting 报告 40 70
Test Report 测试报告 25 40
Size Measurement 计算工作量 10 15
Postmortem & Process Improvement Plan 事后总结,并提出新计划 20 20
Total 总计 1175 1625

 

 

 

 

 

 

 

 

 

 

 

统计字符数函数代码:

int CharCount(char file[]){//字符数统计函数
    FILE *pf=NULL;
    int ccount=0;
    pf=fopen(file,"r");
    if(pf==NULL){
        printf("寻找文件失败\n");
        exit(-1);
    }
    char mychar;
    mychar = fgetc(pf);
    while(mychar!=EOF){
        mychar = fgetc(pf);
        ccount++;
    }
    fclose(pf);
    return ccount;
}

统计行数函数代码:

 

 int LineCount(char file[]){//行数统计函数
    FILE *pf=NULL;
    int lcount=0;
    pf=fopen(file,"r");
    if(pf==NULL){
        printf("寻找文件失败\n");
        exit(-1);
    }
    char mychar;
    mychar = fgetc(pf);
    while(mychar!=EOF){
        if(mychar=='\n'){
            lcount++;
            mychar = fgetc(pf);
        }
        else{
            mychar = fgetc(pf);
        }
    }
   
    fclose(pf);
    return lcount+1;
}

 

 统计单词数函数代码:

 

 int WordCount(char file[]){//单词数统计函数
    FILE *pf=NULL;
    int wcount=0;
    pf=fopen(file,"r");
    if(pf==NULL){
        printf("寻找文件失败\n");
        exit(-1);
    }
    char mychar;
    mychar = fgetc(pf);
    while(mychar!=EOF){
        if(mychar>='a'&&mychar<='z'||mychar>='A'&&mychar<='Z'||mychar>='0'&&mychar<='9'){
            while(mychar>='a'&&mychar<='z'||mychar>='A'&&mychar<='Z'||mychar>='0'&&mychar<='9'||mychar=='_'){
                mychar=fgetc(pf);
            }
            wcount++;
            mychar=fgetc(pf);
        }
        mychar=fgetc(pf);
    }
    fclose(pf);
    return wcount;
}

主函数代码:

int main(){//主函数
    char input[10],File[200];
    while(1){
        printf("请输入用户命令:wc.exe-");
        scanf("%s",&input);
        if(input[0]=='c'){
           printf("请输入文件名:");
           scanf("%s",&File);
           int charcount=0;
           charcount=CharCount(File);
           printf("文件的字符数为:%d\n",charcount);
           continue;   
        }
        if(input[0]=='w'){
            printf("请输入文件名:");
            scanf("%s",&File);
            int wordcount=0;
            wordcount=WordCount(File);
            printf("文件的词数为:%d\n",wordcount);
            continue;
        }
        if(input[0]=='l'){
            printf("请输入文件名:");
            scanf("%s",&File);
            int linecount=0;
            linecount=LineCount(File);
            printf("文件的行数为:%d\n",linecount);
            continue;   
        }
        if(input[0]=='a'){
            printf("请输入文件名:");
            scanf("%s",&File);
            ComplexCount(File);
            continue;
        }
    }
    system("pause");
    return 0;
}

测试结果:

 

 

 

 

 

 

 

项目小结

1、github使用不熟练。

2、只完成了基本功能,高级功能的注释行和代码行的计数算法尚未解决,空行的计数方法存在缺陷。

 

3、高级语言学习匮乏。

 

posted @ 2020-03-25 01:26  谢佳余  阅读(180)  评论(0编辑  收藏  举报