分离输入C ++

时间:2015-03-10 00:46:34

标签: c++ c++11 input io

我正在用C ++制作文字冒险游戏。现在我得到这样的输入:

string word1, word2;
cin >> word1 >> word2;
parse(word1, word2);

示例输入可以是

goto store

现在,要退出,您必须输入quit和任何其他文字才能退出。

如何使输入以空格分隔,我可以判断第二个字符串是否为空。

更新

我尝试了第一个答案,我在Windows上遇到了这个错误:

The instruction at 0x00426968 referenced memory at 0x00000000. 
The memory could not be read.

Click OK to terminate the program.

3 个答案:

答案 0 :(得分:0)

我认为这就是你要找的东西。我不知道解析是如何工作的,但这就是我解决问题的方法

string word1, word2;
cin >> word1;
if(word1 == "quit"){
    //quit code
}
else
    cin >> word2;

通过单独询问输入,您可以插入此if语句。这将检查第一个输入字符串是否“退出”,忽略第二个部分,然后运行退出代码。如果第一条输入不是“退出”,它将询问第二条输入。

答案 1 :(得分:0)

 #include <vector>
 #include <string>
 #include <sstream>
 std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
        std::stringstream ss(s);
        std::string item;
        while (std::getline(ss, item, delim)) {
            if(!item.empty()) //item not elems
            elems.push_back(item);
        }
        return elems;
    }


std::vector<std::string> split(const std::string &s, char delim) {
    std::vector<std::string> elems;
    split(s, delim, elems);
    return elems;
}

此函数std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems)可以使用用户定义分隔符拆分字符串,并将每个字符串存储到向量中。请注意,如果分隔的字符串为空,则不会加入字符串数组。

这个函数std::vector<std::string> split(const std::string &s, char delim)是最后一个函数包装器之一,所以你只需要传递两个参数,方便你使用。

使用像这样的分割函数:

string line;
getline(std::cin,line);
auto strings =split(line,' ');

检查字符串大小你可以知道很多单词。 如果strings大小等于1,那么您的第二个字符串为空。

答案 2 :(得分:-2)

使用此代码,我将整个输入放在一个名为InputText的字符串中,并在循环中按char分析它。我将chars存储在一个名为Ch的字符串中,以避免在我将其声明为char时显示ASCII代码而不是我的char的常见问题。我继续将chars附加到名为Temp的临时字符串中。我有一个名为Stage的int,它决定我的临时字符串应该去哪里。如果Stage为1,那么我将其存储在word1中,每当我到达第一个空格时,我将Stage增加到2并重置临时值;因此,现在开始存储在word2中。如果空间超过1,您可以在default的{​​{1}}处显示错误消息。如果只有一个单词而且根本没有空格,你可以知道,因为我初始化switch并且它在循环之后仍然是这样。

word2 = ""