编码用命令行执行的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("该文件不存在!\n\n\n");
        scanf("%s%s%s",argv[0],argv[1],argv[2]);
        continue;
        }
        else if(strcmp(argv[1],"-c")==0)                   //统计文件字符数
            printf("文件%s字符数为:%d\n",argv[2],Zicount);
        else if(strcmp(argv[1],"-w")==0)                   //统计文件单词数
            printf("文件%s单词数为:%d\n",argv[2],Wordcount);
        else if(strcmp(argv[1],"-l")==0)                  //统计文字总行数
            printf("文件%s总行数为%d\n",argv[2],Hangcount);
//        else if(strcmp(argv[1],"-a")==0)                   //返回高级选项
//            printf("4\n");
//        else if(strcmp(argv[1],"-s")==0)                   //递归处理符合条件的文件
//            printf("5\n");
        else if(strcmp(argv[1],"exit")==0)
        {
            printf("程序结束!\n");
            break;
        }
        else
            printf("该指令不存在,请重新输入\n");
        printf("\n\n");
        scanf("%s%s%s",argv[0],argv[1],argv[2]);
    }
    return 0;

    /*
    char a[20];
    strcpy(a,"haha.txt");
    Count(a);
    printf("%d\n%d\n%d\n",Zicount,Wordcount,Hangcount);
        return 0;
        */
}

void Count(char * file)
{
    FILE * fp;
    char a;
    if((fp=fopen(file,"r"))==NULL)
    {
        printf("读文件失败!\n");
        exit(-1);
    }
    while(!feof(fp))
    {
        a=fgetc(fp);

        if(a!=‘ ‘&&a!=‘\n‘&&a!=‘\t‘&&a!=‘,‘&&a!=‘.‘&&a!=‘!‘&&a!=‘;‘&&a!=‘=‘)
            Zicount++;
        if(a==‘ ‘||a==‘\n‘||a==‘\t‘||a==‘,‘||a==‘.‘||a==‘!‘||a==‘=‘||a==‘;‘)
        {
            if(a==‘=‘)                   //解决==
                Wordcount--;
            Wordcount++;
        }
        if(a==‘\n‘||a==‘\t‘)
            Hangcount++;
    }
    Zicount--;          //at end of the file,Zicount will add
    Hangcount++;        //can‘t recognize the last line
    fclose(fp);
}

执行效果:

感想篇

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

时间: 2024-10-14 00:17:30

编码用命令行执行的C语言词语统计程序的相关文章

编码用命令执行的C语言词语统计程序

需求介绍 程序处理用户需求的模式为: wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下: 1.基本功能 支持 -c  统计文件字符数 支持 -w 统计文件单词数 支持 -l  统计文件总行数 2.拓展功能 支持 -a 返回高级选项(代码行 空行 注释行) 支持 -s 递归处理符合条件的文件 3.高级功能 支持 -x 程序以图形界面与用户交互 [filename] 是待处理文件名. 设计历程及感想 初次看到这个题目,

在命令行执行带包名的Java程序

之前关于如何在命令行运行带包名的java文件的问题,一直搞不懂,直到今天终于明白了是怎么一回事. 以下是我的程序代码 package bonn.thread; import java.sql.SQLOutput; /** * Created by Lin-953 on 2016/1/15. */ public class TestThread { public static void main(String[] args) { Runner r = new Runner(); Thread t

命令行执行python模块时提示包找不到的问题

庄稼人不是专职python开发的道友,虽然与python相识已多年,可惜相识不相知,只是偶尔借助pydev写一些简单的小工具. 多年来,一直困惑于这样一个问题:同样的工程,同样的代码,使用pydev可以运行任意一个python脚本,而使用命令行运行却不行?命令行下(或者双击执行)总是提示"ImportError: No module named xxx"?pydev究竟做了什么魔术呢? 长话短说,以上面工程为例,如果是在命令行中直接执行 python c.py , 都会提示"

IT忍者神龟之命令行执行java程序

第一:简单的命令行(没有package) c:/temp/bin/GetGreeting.java [java] view plaincopy public class GetGreeting { public static void main(String [] args) { System.out.println("Hello world"); } } 1.编译:cmd--cd到c:/temp/bin  javac GetGreeting.java 生成GetGreeting.cl

java工程打成jar包在命令行执行运行缓慢问题解决

一个普通的java工程,用cxf连接webserivice.在eclipse下运行正常,但用eclipse达成jar包,在命令行执行却异常缓慢. 通过一些尝试,发现是因为打包的方式不对.eclipse导出可运行jar包有三种方式,分别为: 1.Extract required libraries into generated JAR 2.Package required libraries into generated JAR 3.Copy required libraries into  a

PHP下的命令行执行

PHP 的命令行模式 以下是 PHP 二进制文件(即 php.exe 程序)提供的命令行模式的选项参数,您随时可以通过 PHP -h 命令来查询这些参数. Usage: php [options] [-f] <file> [args...] php [options] -r <code> [args...] php [options] [-- args...] -s Display colour syntax highlighted source. -w Display sourc

关于jmeter命令行执行.jmx文件出现Error in NonGUIDriver java.lang.RuntimeException: Could not find the TestPlan class的问题

jmeter命令行执行.jmx文件时,有时回出现Error in NonGUIDriver java.lang.RuntimeException: Could not find the TestPlan class的错误 目前出现此错误的原因是在jmeter3.0及以下版本存在bug 对于使用UI界面生成.jmx时,请在testplan层做保存,而非在threads层做保存,如下图

从命令行执行django数据库操作

从命令行执行django数据库操作,报错: django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before

Java命令行执行参数中包含空格被截断的问题解决

使用java -jar命令在命令行执行jar包,传入参数时,参数包含空格,例如“hello world”,这个参数会被解析成两个参数“hello”和“world”.这样的结果是执行时不能正常的获取参数.这时只要在参数两边加上引号即可. 一开始使用的命令如下:java -jar Test.jar %{test}   —— %{test}为其他程序中传入的参数 修改之后的命令如下:java -jar Test.jar ‘%{test}‘  这样就可以作为一个参数获取值了