2017-04-14 56 views
-2

所以我想從格式fileusage.exe命令行讀取輸入開關[開關] [文件夾],其中開關可以在格式,只要他們開始與類型化 - 。例如-c + j#R。試圖讀取命令行與正則表達式

int main(int argc, char *argv[]) 

{ 
    cout.imbue(locale("")); 

vector<char> theSwitches; 
regex switches(R"reg(\-(c|\+|j|#|w|s|x|r|R|S|v|h)$)reg"); 

if (argc > 1) 
{ 

    // search through the command line args and find matching switches 
    if (regex_match(argv[1], switches)) 
    { 
     theSwitches.push_back(argv[1]); 
    } 
    else 
     cout << "Didnt find the switches" << endl; 

} 
+0

那又如何?你有什麼問題? –

+0

我想能夠存儲找到的字符值,例如,如果用戶把-r + c我想要它存儲r + c在切換向量。我的問題是目前不會這樣做。 –

+0

@MemeLord是否會編譯你的代碼?你要解決的問題應該是在問題中。 – marcinj

回答

1

使用此代碼,您將可以迭代參數。我刪除了$,因爲它始終與參數列表的末尾相匹配。

regex switches(R"reg(\-(c|\+|j|#|w|s|x|r|R|S|v|h))reg"); 

std::string s = "-c -S"; 

using reg_itr = std::regex_token_iterator<std::string::iterator>; 
for (reg_itr it{s.begin(), s.end(), switches, {1}}, end{}; it != end;) { 
    std::cout << *it++ << "\n"; 
} 
// outputs: 
// c 
// S 
+0

好吧,我想我明白你的代碼在做什麼有幫助。但是我的程序接受命令行參數作爲字符,因此用戶可以輸入「-cS」,例如當前鍵入的方式,如果它們鍵入只會返回c。 –

+0

謝謝你,我想通了一點點修改你的代碼 –