由于不知道来源出处了,请原作者见谅,如有需要请告知源地址。这里只是贴出来mark一下,以后便于查看。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
static int argcount;    /* total args = argc */
static int nextarg=1;    /* next arg to return in GetxxxArg */
static char **arglist;
/* ----------- Command Line Argument Handling ------------ */
typedef enum {FALSE=0, TRUE=1} Boolean;
typedef enum {SWITCHARG, STRINGARG, INTARG, FLOATARG, NOARG} ArgKind;
void InitShell(int argc, char *argv[])
{int i;argcount = argc;arglist = (char **) malloc(argc*sizeof(char *));for (i=0;i<argc;i++){arglist[i] = argv[i];}
}
/* NumHead: returns TRUE if the first two chars of a stringare ('+'|'-') digit | digit */
Boolean NumHead(char *s)
{if (*s!='/0')if (isdigit((int) *s))return TRUE;if (((*s=='+') || (*s=='-')) && (isdigit((int) *(s+1))))return TRUE;return FALSE;
}
int NumArgs(void)
{return argcount-nextarg;
}
char * GetNextArg(Boolean step)
{char *s;if (argcount>nextarg) {s = arglist[nextarg];    }if (step) {++nextarg;}return s;
}
/* EXPORT->NextArg;Kind of next argument */
ArgKind NextArg(void)
{char *s,*p;if (NumArgs() == 0) return NOARG;s = GetNextArg(FALSE);if ( NumHead(s)) {strtod(s,&p);if ( p==NULL || *p=='/0' ) {if (strchr(s,'.') == NULL)return INTARG;elsereturn FLOATARG; }}if (*s=='-')return SWITCHARG;return STRINGARG;
}
char  *GetStrArg(void)
{char *s;if (NextArg() != STRINGARG ){printf("%s is not string/n",GetNextArg(FALSE));exit(1);}return GetNextArg(TRUE);
}
char  *GetSwtArg(void)
{if (NextArg() != SWITCHARG ){printf("%s is not switch/n",GetNextArg(FALSE));exit(1);}return GetNextArg(TRUE)+1;
}
int  GetIntArg(void)
{int i;char *s;if (NextArg() != INTARG ){printf("%s is not int/n",GetNextArg(FALSE));exit(1);}s = GetNextArg(TRUE);if (sscanf(s,"%i",&i) != 1){;}return i;
}
float GetFltArg(void)
{int k = NextArg();if (k != INTARG && k != FLOATARG) {printf("%s is not float/n",GetNextArg(FALSE));exit(1);}return atof(GetNextArg(TRUE));
}
void ReportUsage(void)
{printf("/n USAGE: HERest [options] hmmList .../n/n");printf(" Option                              /n/n");printf(" -A      Command Line Printed        /n");printf(" -H mmf  LOAD HMM macro file mmf           ./MMF/n");printf(" -w f    set mix weight floor to f*MINMI    0.0/n");printf(" -m N    set min examples needed per model  3/n");
}
int main(int argc, char *argv[])
{if( argc == 1 ) {ReportUsage();exit(1);}InitShell(argc, argv);char *s;while (NextArg() == SWITCHARG) {s = GetSwtArg();if (strlen(s)!=1) {printf("switch must be single letter/n");exit(1);}switch(s[0]) {case 'A':printf("-A/n");break;case 'H':printf("-H/t%s/n",GetStrArg());break;case 'w':printf("-w/t%f/n",GetFltArg());break;case 'm':printf("-m/t%d/n",GetIntArg());break;default:printf("unkown switch %s/n",s);exit(1);}}if (NextArg() != STRINGARG) {printf("hmmlist expected/n");exit(1);    }printf("/t%s/n",GetStrArg());exit(0);
}

HTK里面实现的参数读取与此类似,但是加入了更多的安全检查机制,以及默认统一参数的解析。以后研究清楚了更新一下。

转载于:https://www.cnblogs.com/wb-DarkHorse/archive/2012/10/12/2721028.html

(转:htk中命令行参数的读取)相关推荐

  1. 文本编辑器中命令行参数的应用

    文章目录 1 文本编辑器中命令行参数的应用 1 文本编辑器中命令行参数的应用 我们要知道对于每一个应用程序我们都能够接收命令行参数,那么对于GUI系统中命令行参数如何传递到应用程序呢? 主要有如下两种 ...

  2. c++笔记(1):C++中命令行参数argc,argc[ ]究竟是什么

    C++中命令行参数argc,argc[ ]究竟是什么 1.argc为整数 2.argv为指针的指针(可理解为:char **argv or: char *argv[] or: char argv[][ ...

  3. python 命令行参数-python中命令行参数

    python中有一个模块sys,sys.argv这个属性提供了对命令行参数的访问.命令行参数是调用某个程序时除程序名外的其他参数. sys.argv是命令行参数的列表 len(sys.argv)是命令 ...

  4. Go语言中命令行参数的实现

    为什么80%的码农都做不了架构师?>>>    在写命令行程序时,对命令参数进行解析是常见的需求.各种语言一般都会提供解析命令行参数的方法或库,以方便程序员使用.如果命令行参数纯粹自 ...

  5. 在c语言中命令行参数是什么,C语言命令行参数

    这是可能在命令行中的一些值传递给C程序执行.特别是从参数传入,而不是外界硬编码写入这些值到代码控制程序中,这些值被称为命令行参数,很多时候,它们对程序很重要. 命令行参数使用main()函数的参数,其 ...

  6. c语言中命令行参数argc,argv[]详解

    argc 是 argument count的缩写,表示传入main函数的参数个数: argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0 ...

  7. python获取命令行参数_【整理】Python中如何获得并处理命令行参数

    运行Python脚本时,时常需要从命令行中传递一些参数到Python程序中,但是如何获得相应的传递进来的参数,以及如何解析这些参数,是很多人,包括最开始的我,所遇到的问题. 下面,就对此总结一下: 先 ...

  8. Python的命令行参数解析

    文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书 命令行参数解析在编程语言中基本都会碰到,Python中内置了一个用于命令项选项与参数解析的模块argparse.下 ...

  9. 编程模板-R语言脚本写作:最简单的统计与绘图,包安装、命令行参数解析、文件读取、表格和矢量图输出

    写在前面 个人认为:是否能熟悉使用Shell(项目流程搭建)+R(数据统计与可视化)+Perl/Python等(胶水语言,数据格式转换,软件间衔接)三门语言是一位合格生物信息工程师的标准. 之前分享过 ...

  10. 安装rpm包命令_编程模板-R语言脚本写作:最简单的统计与绘图,包安装、命令行参数解析、文件读取、表格和矢量图输出...

    不常用R的朋友,可能并不能意识到好的编辑模板带来的长期效率提高和代码重用性,非计算机专业科研人员且需要使用R语言,此文会对您有帮助. 个人认为:是否能熟悉使用Shell(项目流程搭建)+R(数据统计与 ...

最新文章

  1. Intel AMT 可以获得的系统电源状态
  2. ES6简单总结(搭配简单的讲解和小案例)
  3. 密码学系列之:SAFER
  4. Hibernate HQL基础 调用数据库存储过程
  5. [JavaWeb-MySQL]SQL基本概念,通用语法,分类
  6. cv2 python 多线程调用摄像头_2种方法用python调用cv2模块给图片打马赛克
  7. matlab 安装教程:matlab 2016a(matlab R2016a)
  8. Unity中文乱码的解决方法
  9. 用SQL来校验证件号码是否合法
  10. 宜信智能监控平台建设实践|分享实录
  11. 2022蓝帽杯初赛wp
  12. python下载谷歌地图瓦片_python抓取天地图瓦片
  13. linux上好玩的东西
  14. Math.Round函数
  15. Java学习:IT行业是否已经开始饱和或者过剩?
  16. libnet下载和交叉编译
  17. 阿里云上为服务器申请外网网卡并绑定公网ip
  18. 2022二建建筑实务考试综合测试题目与答案
  19. 关于wxParse的使用
  20. 房地产妙布“网络营销战局”

热门文章

  1. Java代码:调用外部接口(使用Json格式传递参数)的方法
  2. Dubbo介绍前篇------单一应用框架、垂直应用框架、分布式应用框架、流动计算框架,及RPC的简介
  3. Hive2.0中HiveServer2的WEB UI界面
  4. 在 for 循环里写加号拼接字符串的那个同事,不见了~
  5. 厉害了,Netty 轻松实现文件上传!
  6. 卧槽!我的IDEA中XML显示屎黄色,怎么去掉?
  7. Facebook是如何大幅提升TLS连接效率的?
  8. Android你可能要用到的自定义View分享
  9. zabbix监控之概念和安装
  10. ip xfrm命令是做什么的?