liyanbo的个人博客分享 http://blog.sciencenet.cn/u/liyanbo

博文

师姐代码心得-1解析命令行

已有 1991 次阅读 2016-2-20 19:55 |个人分类:C++|系统分类:科研笔记

最近在看许师姐代码,发现她用的好多东西我都没有用过,所以打算学习一下师姐代码中用的东西。

1、int getopt(int argc, char * const argv[], const char *optsring);

给定了命令参数的数量 (argc)、指向这些参数的数组 (argv) 和选项字符串 (optstring) 后,getopt() 将返回第一个选项,并设置一些全局变量。使用相同的参数再次调用该函数时,它将返回下一个选项,并设置相应的全局变量。如果不再有识别到的选项,将返回 -1,此任务就完成了。

getopt() 所设置的全局变量包括:

  • optarg——指向当前选项参数(如果有)的指针。

  • optind——再次调用 getopt() 时的下一个 argv 指针的索引。

  • optopt——最后一个已知选项。

对于每个选项,选项字符串 (optstring) 中都包含一个对应的字符。具有参数的选项(如示例中的 -l-o 选项)后面跟有一个 : 字符。示例所使用的 optstringIl:o:vh?(前面提到,还要支持最后两个用于打印程序的使用方法消息的选项)。

可以重复调用 getopt(),直到其返回 -1 为止。


代码示例如下:

#include <unistd.h>


typedef map<string,string> Arguments;

string optString = "a:b:cEF";

int main(int argc, char** argv) {//argc命令行用空格隔开的string个数,argv存命令行所写的所有字符串

    int c;

    Arguments args;

    while ( (c=getopt(argc-1, argv+1, optString.c_str())) != -1 )  {//若是第一个参数不用解析

         string value = "?";

         string arg(1,c);

         if (optarg != NULL) {

              value = string(optarg);

         }

        args.insert({arg,value}); // C++11标准可以用{}代替make_pair

    }

}



 


2 getopt_long()

在#include <getopt.h>头文件中,


 

 

 


参考文献:

http://www.ibm.com/developerworks/cn/aix/library/au-unix-getopt.html



https://blog.sciencenet.cn/blog-1515646-908824.html

上一篇:举例说明单纯形的二阶段法
下一篇:C++文件夹存在,删除,判断存在
收藏 IP: 159.226.43.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-7-17 21:17

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部