【问题标题】:C++ Loading user input into vectorC ++将用户输入加载到向量中
【发布时间】:2013-11-19 16:24:40
【问题描述】:

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

【问题讨论】:

  • 我假设您从 stackoverflow 问题 How to split a string in C++? 中获得了此代码。我建议您使用this answer,因为它更具可扩展性。
  • 我试过了,不知道怎么用。为什么你需要一个 const 字符串才能使用它,我不明白。
  • 据我所知,您正在尝试编写拆分字符串的代码。即它将需要一长串字符将其拆分为一个较小块的向量。但是,您在顶部的描述是关于阅读用户输入的。你确定你已经考虑过你想做的事情吗?我可以看到两种可能性:1)读取输入,拆分输入并存储,结束。或者 2) 读取输入、存储输入、读取更多输入、存储输入等
  • 我正在以交互方式阅读输入。 exit 命令将退出 while 循环并结束程序。

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


【解决方案1】:

为什么不直接使用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.
}

【讨论】:

  • 因为程序会马上结束,但我想让用户一个接一个地给出多个命令,而我没有“退出”命令。
  • 哦,所以您希望以交互方式获取用户输入,而不是作为命令行参数。我想我误解了你的问题。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    根据您的评论:“我正在以交互方式读取输入。退出命令将离开 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-09
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      相关资源
      最近更新 更多