程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 命令行選項的處理

命令行選項的處理

編輯:C++入門知識

       對命令行的選項的處理有時是一個比較頭疼的問題。首先需要從輸入中識別出命令行選項來,通過選項的組合出需要調用的具體處理過程。在unix世界中命令行選項有共性,更是千差萬別。如果手工去處理我們的方法一般會先進行分詞,之後進行詞法分析。這個過程的復雜度隨著參數數量的增加而增加。        [cpp]       int main(int argc, char **argv)       {           return 0;       }   argc記錄了參數的個數,argv是輸入的字符串。對argv進行分拆使用: [cpp]   #include <string.h>    char *strtok(char *str, const char *delim);   注意strtok會破壞原有字符串的內存,需要對str進行復制一下。每次分拆後strtok的處理節點會下移,可以判斷str是否為NULL來結束循環。當然,你也可以使用c++中的std::string的find函數來處理,如果需要更強大點就用boost庫的boost::algorithm::split處理吧。原型如下: [cpp]   namespace boost {     namespace algorithm {       template<typename SequenceSequenceT, typename RangeT, typename PredicateT>          SequenceSequenceT &          split(SequenceSequenceT &, RangeT &, PredicateT,                token_compress_mode_type = token_compress_off);     }   }   還有或者直接用boost::tokenizer,他有一個boost::tokenizer::iterator的迭代器,可以實現對參數的分解。   [cpp]   template <           class TokenizerFunc = char_delimiters_separator<char>,            class Iterator = std::string::const_iterator,           class Type = std::string     >     class tokenizer     這些都需要我們去處理這些過程。不過我們很幸運,getopt能夠完成我們需要的這些功能。在bash中getopt是一個外部程序提供了長短選項的支持。通過-o和-l實現對短選項和長選項的處理。   [plain]   short_options="b:r"   long_options="back:,restore:"      opts=`getopt -o $short_options --long $long_options`   在C中unistd.h和getopt.h分別提供了針對於短選項和長選項的支持。函數原型如下:   [cpp]         #include <unistd.h>             int getopt(int argc, char * const argv[],                      const char *optstring);          extern char *optarg;          extern int optind, opterr, optopt;             #include <getopt.h>             int getopt_long(int argc, char * const argv[],                     const char *optstring,   www.2cto.com                   const struct option *longopts, int *longindex);             int getopt_long_only(int argc, char * const argv[],                     const char *optstring,                     const struct option *longopts, int *longindex);   使用如下:   [cpp]   result = getopt(argc, argv, "a:b:");   如果失敗result為-1,否則為選項字符,optarg為選項內容,optopt為選項。 第三個參數是選項: 單個字符,表示選項, 單個字符後接一個冒號:表示該選項後必須跟一個參數。參數緊跟在選項後或者以空格隔開。該參數的指針賦給optarg。 大部分的語言都內置了getopt的支持,使用方法都差不多,比如python   [python]   import getopt,sys   opts, args = getopt.getopt(sys.argv[1:], "ho:", ["help", "output="])     現在我們很容易的去實現一個程序的入口部分。但是如果我們需要一個交互的CLI界面那就需要readline庫來支持了。他會提供包括命令補全,歷史記錄,shell快捷鍵支持的相關功能。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved