zoukankan      html  css  js  c++  java
  • 编码用命令行执行的C语言词语统计程序

    需求介绍

    程序处理用户需求的模式为:

    • wc.exe [parameter][filename]

    在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下:

    1、基本功能

    • 支持 -c  统计文件字符数
    • 支持 -w 统计文件单词数
    • 支持 -l  统计文件总行数

    2、拓展功能

    • 支持 -a 返回高级选项(代码行 空行 注释行)
    • 支持 -s 递归处理符合条件的文件

    3、高级功能

    • 支持 -x 程序以图形界面与用户交互

    [filename] 是待处理文件名。

    设计历程及感想

      初次看到这个题目,真的是一头雾水,因为以前编译代码都是用编译器直接编译的,而这次要求写一个命令行程序,于是,我找到了度娘,度娘告诉我,main函数的参数

    int argc, char* argv[]可以帮到你,通过阅读相关文档,我对其有了大致了解:

    argc这个整形数据用来保存后面字符串argv的空间大小,而argv则用来保存命令行的输入数据。

    明白了这些,思路顿时打开了,这个题目要求的无非是从命令行向main函数里输入控制参数,从而达到按条件计数的效果

    基本功能

    • 支持 -c 统计文件字符数
    • 支持 -w 统计文件单词数
    • 支持 -l  统计文件总行数

     由于时间安排不妥当,导致此次编程周期不长,所以具体功能都没有细化,下面附上代码,个人感觉最大的亮点就是命令行执行代码,话不多说,贴代码,发效果图,睡觉!

    #include "stdafx.h"
    #include "string.h"
    #include "stdlib.h"
    
    void Count(char * file); 
    int Zicount=0;
    int Wordcount=0;
    int Hangcount=0;
    
    int main(int argc, char* argv[])               //argv[1]保存指令,argv[2]保存文件路径
    {
        FILE *fp;
        Count(argv[2]);
        while(1)
        {
            if((fp=fopen(argv[2],"r"))==NULL)
            {    
            printf("该文件不存在!
    
    
    ");
            scanf("%s%s%s",argv[0],argv[1],argv[2]);
            continue;
            }
            else if(strcmp(argv[1],"-c")==0)                   //统计文件字符数
                printf("文件%s字符数为:%d
    ",argv[2],Zicount);
            else if(strcmp(argv[1],"-w")==0)                   //统计文件单词数
                printf("文件%s单词数为:%d
    ",argv[2],Wordcount);
            else if(strcmp(argv[1],"-l")==0)                  //统计文字总行数
                printf("文件%s总行数为%d
    ",argv[2],Hangcount);
    //        else if(strcmp(argv[1],"-a")==0)                   //返回高级选项
    //            printf("4
    ");  
    //        else if(strcmp(argv[1],"-s")==0)                   //递归处理符合条件的文件
    //            printf("5
    ");
            else if(strcmp(argv[1],"exit")==0)
            {
                printf("程序结束!
    ");
                break;
            }
            else 
                printf("该指令不存在,请重新输入
    ");
            printf("
    
    ");
            scanf("%s%s%s",argv[0],argv[1],argv[2]);
        }
        return 0;
        
        /*
        char a[20];
        strcpy(a,"haha.txt");
        Count(a);
        printf("%d
    %d
    %d
    ",Zicount,Wordcount,Hangcount);
            return 0;
            */
    }
    
    
    void Count(char * file)
    {
        FILE * fp;
        char a;
        if((fp=fopen(file,"r"))==NULL)
        {
            printf("读文件失败!
    ");
            exit(-1);
        }
        while(!feof(fp))
        {
            a=fgetc(fp);
    
            if(a!=' '&&a!='
    '&&a!='	'&&a!=','&&a!='.'&&a!='!'&&a!=';'&&a!='=')
                Zicount++;
            if(a==' '||a=='
    '||a=='	'||a==','||a=='.'||a=='!'||a=='='||a==';')
            {
                if(a=='=')                   //解决==      
                    Wordcount--;
                Wordcount++;
            }
            if(a=='
    '||a=='	')
                Hangcount++;
        }
        Zicount--;          //at end of the file,Zicount will add 
        Hangcount++;        //can't recognize the last line
        fclose(fp);
    }

    执行效果:

    感想篇

      通过写这个命令行程序,我意识到以前接触的东西实在太少,困在一个小圈子里不敢出去,以后必须去接触更多的东西,切不可坐井观天。

  • 相关阅读:
    Single Number II
    Pascal's Triangle
    Remove Duplicates from Sorted Array
    Populating Next Right Pointers in Each Node
    Minimum Depth of Binary Tree
    Unique Paths
    Sort Colors
    Swap Nodes in Pairs
    Merge Two Sorted Lists
    Climbing Stairs
  • 原文地址:https://www.cnblogs.com/weit/p/5303892.html
Copyright © 2011-2022 走看看