命令列選項的處理

2021-12-29 16:22:36 字數 2353 閱讀 5342

對命令列的選項的處理有時是乙個比較頭疼的問題。首先需要從輸入中識別出命令列選項來,通過選項的組合出需要呼叫的具體處理過程。在unix世界中命令列選項有共性,更是千差萬別。如果手工去處理我們的方法一般會先進行分詞,之後進行詞法分析。這個過程的複雜度隨著引數數量的增加而增加。     

[cpp]  

int main(int argc, char **ar**)  

return 0;  

argc記錄了引數的個數,ar**是輸入的字串。對ar**進行分拆使用:

[cpp]  

#include  

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   

sequencesequencet &   

split(sequencesequencet &, ranget &, predicatet,   

token_compress_mode_type = token_compress_off);  

還有或者直接用boost::tokenizer,他有乙個boost::tokenizer::iterator的迭代器,可以實現對引數的分解。

[cpp]  

template <  

class tokenizerfunc = char_delimiters_separator,   

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  

int getopt(int argc, char * const ar**,   

const char *optstring);  

extern char *optarg;  

extern int optind, opterr, optopt;  

#include  

int getopt_long(int argc, char * const ar**,  

const char *optstring,   www.2cto.com

const struct option *longopts, int *longindex);  

int getopt_long_only(int argc, char * const ar**,  

const char *optstring,  

const struct option *longopts, int *longindex);  

使用如下:

[cpp]  

result = getopt(argc, ar**, "a:b:");  

如果失敗result為-1,否則為選項字元,optarg為選項內容,optopt為選項。

第三個引數是選項:

單個字元,表示選項,

單個字元後接乙個冒號:表示該選項後必須跟乙個引數。引數緊跟在選項後或者以空格隔開。該引數的指標賦給optarg。

大部分的語言都內建了getopt的支援,使用方法都差不多,比如python

[python]  

import getopt,sys  

opts, args = getopt.getopt(sys.ar**[1:], "ho:", ["help", "output="])    

現在我們很容易的去實現乙個程式的入口部分。但是如果我們需要乙個互動的cli介面那就需要readline庫來支援了。他會提供包括命令補全,歷史記錄,shell快捷鍵支援的相關功能。

命令列選項的處理

2012十二月 19日 對命令列的選項的處理有時是乙個比較頭疼的問題。首先需要從輸入中識別出命令列選項來,通過選項的組合出需要呼叫的具體處理過程。在unix世界中命令列選項有共性,更是千差萬別。如果手工去處理我們的方法一般會先進行分詞,之後進行詞法分析。這個過程的複雜度隨著引數數量的增加而增加。in...

main 處理命令列選項

main 處理命令列選項 int main int argc,char argv 是c 的裡面的 main 函式的一種擴充套件原型 其中int argc 表示的是執行程式時命令列裡所帶引數的個數 1 因為包括了該程式名 如果不帶引數的話那就預設是 1 char argv 引數是字元陣列的指標,也可以...

main處理命令列選項

main處理命令列選項 雨竹清風 main 函式的引數可以是不為空,main 函式中的引數有兩個,乙個是argc表示陣列中元素的個數,乙個是char argv,表示的是指向乙個字串陣列的指標,所以也可以寫成char argv。有參的main 函式可寫為main int argc,char argv ...