2017-10-09 26 views
2

"help"のような5文字のコマンドから "delete -p 'George"のようなユーザー入力を受け取るプログラムがあります。forループのない文字列の文字配列の解析?

私は持っていません多くのforループを実行する以外に、C++の多くの経験は、charの配列を解析するより効果的な方法があるかどうか疑問に思っていました。

誰かが正しい方向を指すことができますか?

#include <iostream> 
#include <string> 
#include <vector> 

int main() { 
    std::vector<std::string> args; 
    std::string arg; 
    while(std::cin >> arg) { 
     args.push_back(arg); 
    } 
} 

:あなたは、引数の相対的な小さなセットを解析している場合、プログラムは、のようなものを実行しているよう

+0

は、コマンドラインオプションを解析するように、チェックしてくださいね[ '後押し:: program_options'を](http://www.boost.org/doc/libs/1_63_0/doc/html/program_options/tutorial .html#idp523371328) – CoryKramer

+0

「より効果的な方法」を求めています。何よりも効果的ですが、現在のソリューションは何ですか? – opetroch

答えて

0

別にブーストライブラリからのコメントで提案されているように、あなたは、引数に取るための簡単なstd::cinを使用することができます上記のコマンドの終了をマークするEOF(キャリッジリターンではない)が必要です。

実証されたように、コマンドの終わりをマークするキャリッジリターンのために、あなたは、getline()が必要になりますが:

std::vector<std::string> get_args() { 
    using std::string; 
    using std::stringstream; // don't forget to include <sstream> header 

    string line; 
    getline(std::cin, line); 
    stringstream ss; 
    ss << line; 

    std::vector<string> cmds; 
    string cmd; 
    while (ss >> cmd) { 
     cmds.push_back(cmd); 
    } 

    return cmds; 
} 

それとも、引数を取るためにあなたの主な機能が欲しい場合:

int main(int argc, char **argv) { 
    // The call to the excutable itself will be the 0th element of this vector 
    std::vector<std::string> args(argv, argv + argc); 
} 
0

はい、次のようにchar配列を文字列に割り当てることができます:

char array[5] = "test"; 
string str (array); 
cout << str; 

出力:

test 
+0

@ user1692517私の答えは、あなたが答えを受け入れるか、またはupvote、おかげで有用だった場合。 – aghilpro