0

ユーザーがコマンドとデータを入力できるコマンド ライン アプリを作成しようとしていますが、istream_iterator がどのように機能しているかがよくわかりません。現在、すべての単語に対して新しい while ループを作成していますが、これは必要なものではありません。

int main(int argc, char* argv[])
{
    string buffer;      
    //vector<string> vbuff;
    CliHandler clihandler(argc, argv);
    int state = clihandler.State();
    while (state != CliHandler::STATE_EXIT) {

        cout << ">>";
            //Beolvasás
            cin >> buffer;
            stringstream sstream(buffer);
            istream_iterator<string> begin(sstream);
            istream_iterator<string> end;
            vector<string> vbuff(begin,end);

            copy(vbuff.begin(), vbuff.end(), std::ostream_iterator<string>(std::cout, "\n"));//test

            //vbuff = vector<string>((istream_iterator<string>(cin)), istream_iterator<string>());
            //copy(vbuff.begin(), vbuff.end(), std::ostream_iterator<string>(std::cout, "\n"));

            switch(clihandler.State(vbuff[0])) {
                          // [command] [data1] [data2] ...
            }
    }

    return 0;
}
4

3 に答える 3

0

argcパラメータとパラメータを使用しないのはなぜargvですか? このようなもの..(テストしていません)

int main(int argc, char* argv[])
{
    vector<string> vbuff(argc);
    for (int i = 0; i < argc; ++i)
    {
        vbuff[i] = argv[i];
    }

    // From here, you can use vbuff for your own purposes.
}
于 2013-11-19T16:32:23.243 に答える
0

あなたのコメントに基づいて:「私は対話的に入力を読んでいます。終了コマンドはwhileループを離れてプログラムを終了します」

入力文字列を処理する前に、その単純なループを最初に機能させる方がよいでしょう。

std::string inputCommand;
while(inputCommand != "Exit")
{
    cin >> inputCommand;
    //do stuff with it
}

次に、文字列を分割して処理することを検討できます

bool shouldExit(false);
std::vector<std::string> inputsReceived;
while(!shouldExit)
{
    char delim ('#'); //here put whatever character your inputs are separated by
    std::string buffer;
    cin >> buffer;
    std::stringstream ss;
    ss << buffer;
    std::string item;
    while (std::getline(ss, item, delim))
    {
        if (item == "Exit") //case sensitive
        {
            shouldExit = true;
            break;
        }
        else
        {
            //do whatever with input
        }

        //if you want to keep a record of the inputs in a vector
        inputsReceived.push_back(item);
    }
}
于 2013-11-22T11:16:45.817 に答える
0

私はあなたが何を望んでいるのかよくわかりません(私の貧弱な英語..)、おそらく入力するまで行全体の入力を取得したいので、cin.getlineを使用できると思います

    char mbuf[1024];
    cin.getline(buffer,1024);
于 2013-11-19T16:34:40.390 に答える