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();”

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

  • 相关阅读:
    This counter can increment, decrement or skip ahead by an arbitrary amount
    LUT4/MUXF5/MUXF6 logic : Multiplexer 8:1
    synthesisable VHDL for a fixed ratio frequency divider
    Bucket Brigade FIFO SRL16E ( VHDL )
    srl16e fifo verilog
    DualPort Block RAM with Two Write Ports and Bytewide Write Enable in ReadFirst Mode
    Parametrilayze based on SRL16 shift register FIFO
    stm32 spi sdcard fatfs
    SPI bus master for System09 (2)
    SQLSERVER中的自旋锁
  • 原文地址:https://www.cnblogs.com/CyJack/p/7595285.html
Copyright © 2011-2022 走看看