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);
    }
    复制代码

    执行效果:

    感想篇

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

  • 相关阅读:
    输出流OutputStream简单理解
    IO流实现写入规定的acci码值
    事务的ACID属性&&五种状态
    java基础总结之Hashtable
    HBase
    oracle交换分区
    ArrayList 和 LinkedList 的区别(底层数据结构): 什么时候使用arrayList,什么时候使用LinkedList (一个小时)
    Mac中MariaDB数据库的安装步骤
    Mac OS X中MacPorts安装和使用(linux 的 yum)
    SFTP秘钥认证
  • 原文地址:https://www.cnblogs.com/wsndlzl/p/5827947.html
Copyright © 2011-2022 走看看