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

C++ Loading user input into vector

本文关键字:向量 加载 输入 用户 C++      更新时间:2023-10-16

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

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

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

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

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