zoukankan      html  css  js  c++  java
  • 软件工程实践小项目之模拟wc.exe的小程序

    github源码和工程文件地址:https://github.com/Jackchenyu/Word_counts/tree/smart

    基本要求:要实现wc的基本功能即文件中字符数、单词数、行数的统计。

    主要功能:文件中字符数、单词数、行数的统计和注释行统计。

    设计思想:将文件中的一行字符读完来统计行数,然后运用字符数组再去分别统计字符数和单词数。

    程序代码:

    #include "stdio.h"
    #include "string.h"
    #include "stdlib.h"
     
    int c=0;
    int w=0;
    int l=0;
    int i=0;

    void calculate(char * filename)
    {
        FILE * fp;
        char a;
        if((fp=fopen(filename,"r"))==NULL)
        {
            printf("%s 读取失败!\n",filename);
            exit(-1);
        }
        while(!feof(fp))        //设置循环,同时判断是否到达文件尾或者发生错误;
        {
            a=fgetc(fp);        //从文件中读取一个字符;
            if(a!=' '&&a!='\n'&&a!='\t'&&a!=','&&a!='.'&&a!='!'&&a!=';'&&a!='=')
                c++;
            if(a==' '||a=='\n'||a=='\t'||a==','||a=='.'||a=='!'||a=='='||a==';')
                w++;
            if(a=='\n'||a=='\t')
                l++;
        }
        l++;
        c--;         
        fclose(fp);
    }

    int readData(char *filename) //此函数计算英文单词个数
    {
        FILE* fp;
        char ch;
        char flag = 0;
        int num=0;
         
        if((fp = fopen(filename,"r")) == NULL)
        {
            printf("%s 读取失败!",filename);
            exit(EXIT_FAILURE);
        }
        printf("%s 读取成功!!!\n",filename);
        while(!feof(fp))        //设置循环,同时判断是否到达文件尾或者发生错误;
        {
            ch = fgetc(fp);        //从文件中读取一个字符;
            if((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9'))
                flag = 0;
            else if(flag == 0 && (ch != '-' && ch != '/'&& ch != '\''))
            {
                num++;
                flag = 1;
            }
        }
        fclose(fp);
        return num;
    }
     
    int main(int argc, char* argv[])             
    {
        FILE *fp;
        calculate(argv[2]);
        while(1)
        {
            if((fp=fopen(argv[2],"r"))==NULL)
            {  
            printf("没有找到该文件!\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],c);
            else if(!strcmp(argv[1],"-w"))                  
                printf("File:%sWordNum:%d\n",argv[2],w);
            else if(!strcmp(argv[1],"-l"))                
                printf("File:%sLineNum:%d\n",argv[2],l);
            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;
         
    }

    代码借鉴于:http://www.cnblogs.com/changjiangcheng/p/5304120.html

    在源码上实现了返回当前目录、子目录所有.c文件的代码行数,空行数,注释行数;在源码的基础上我增加了计算单词个数和计算字符个数这两个功能:“readWord();”“readChar();”

    如果有什么不对的地方请多多指教。

  • 相关阅读:
    2020~2021年第一学期《计算机科学概论》第一周学习总结
    蓝精灵小组第六周小组讨论学习总结
    2020-2021年第一学期 20202412姜和言 《网络空间安全》第六周学习总结
    蓝精灵小组第五周小组讨论学习总结
    2020-2021年第一学期 20202412姜和言 《网络空间安全》第五周学习总结
    2020-2021年第一学期 20202412姜和言 《网络空间安全》第四周学习总结
    蓝精灵小组第二周小组讨论学习总结
    2020-2021年第一学期 20202412姜和言 《网络空间安全》第三周学习总结
    蓝精灵小组第二周小组讨论学习总结
    2020-2021年第一学期 20202412姜和言 《网络空间安全》第二周学习总结
  • 原文地址:https://www.cnblogs.com/CyJack/p/7595285.html
Copyright © 2011-2022 走看看