C ++将用户输入加载到矢量中

时间:2013-11-19 16:24:41

标签: c++ vector command-line-interface istream-iterator

我正在尝试创建一个命令行应用程序,用户可以在其中输入命令和数据,但我真的不知道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;
}

3 个答案:

答案 0 :(得分:0)

为什么不使用argcargv参数?这样的东西..(尚未测试)

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.
}

答案 1 :(得分:0)

我不太确定你想要什么(我的英语很差..),也许你想要输入整行,直到输入 我想你可以使用cin.getline

    char mbuf[1024];
    cin.getline(buffer,1024);

答案 2 :(得分:0)

根据你的评论:“我正在以交互方式阅读输入.exit命令将离开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);
    }
}