向量只包含一个元素
Vector only contains one element
我正在用 C++ 编写一个文本冒险游戏来尝试学习这门语言。玩家使用 look 或 travel 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);
我正在用 C++ 编写一个文本冒险游戏来尝试学习这门语言。玩家使用 look 或 travel 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);