向量只包含一个元素

Vector only contains one element

我正在用 C++ 编写一个文本冒险游戏来尝试学习这门语言。玩家使用 looktravel north 等命令进行交互。到目前为止,我已经获得了将文本转换为小写字母然后将其拆分为 Vector 的代码。这适用于单字命令,但是当我去实现更长的命令时,我发现长度总是 = 1 并且访问 returns 时出错。这是我的代码:

//Input function.
void Input() {
    const char delim = ' ';

    //Processing
    std::cin >> input;
    std::transform(input.begin(), input.end(), input.begin(),
        [](unsigned char c) { return std::tolower(c); });
    std::vector<std::string> out;
    split(input, ' ', out);

    //Commands
    if (out[0] == "exit")
        exit(0);
    else if (out[0] == "help")
        Help();
    else if (out[0] == "look")
        Look();
    else if (out[0] == "travel" || out[0] == "go") {
        //This code will never run.
        if (int(out.size()) == 2) {
            Travel(out[1]);
        }
    }
}

//Split function
void split(std::string const& str, const char delim, std::vector<std::string>& out)
{
    std::stringstream ss(str);
    std::string s;

    while (std::getline(ss, s, delim)) {
        out.push_back(s);
    }
}

非常感谢任何帮助! 谢谢,洛根。

有趣的事实,当你这样做时:

std::cin >> input;

它读取字符直到下一个空白字符,并将它们放入字符串中。这意味着 input 将只包含您输入的第一个单词。

想得到整条线吗?好吧,显然,您已经知道该怎么做,只需调用 std::getline:

std::getline(std::cin, input);