2017-04-14 13 views
-2

コマンドラインから入力を読み込もうとしていますが、スイッチのフォーマットがfileusage.exe [switches] [folder] 。たとえば、-c + j#Rとなります。regexでコマンドラインスイッチを読み込もうとしています

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をtheSwitchesベクトルに格納したい場合など、見つかったchar値を格納できるようにしたいとします。私の問題は、それは現在それをしないことです。 –

+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

さて、私はあなたのコードが何をしているのか理解していると思います。しかし、私のプログラムでは、コマンドライン引数をcharとして受け付けるので、ユーザーは "-cS"と入力し、現在の方法では、単にcを返すように設定します。 –

+0

ありがとう、私はちょっとあなたのコードを少し修正しました –

関連する問題