比较两半的字符串

时间:2015-02-02 17:27:50

标签: c++ if-statement text

我在C ++中构建一个基于文本的游戏作为我学习中的一个副项目,所以我试图找到一种方法来分析两半的字符串。它将检查第一个单词,然后如果单词被识别,它将看到它后面的单词。例如,如果在getln()中输入;是"采取苹果"它会识别" take"然后检查你在字符串的后半部分究竟是在做什么。现在,我能想到的唯一方法是让玩家进入"采取"这导致大量嵌套的if / else语句。

2 个答案:

答案 0 :(得分:1)

您可以尝试将tokenise输入字符串放入其组件中。然后,鉴于您使用C ++,我建议使用多态的无条件设计:

创建基本类型:

class Command {
  public:
    virtual void exec(::std::vector<::std::string> parameters) = 0;
};

然后创建子命令,例如:

class TakeCommand : public Command {
  public:
    virtual void exec(::std::vector<::std::string> parameters);
};

然后,在启动期间,建立自己,一个字典(或Trie,如果你感觉花花公子)类型

::std::map<::std::string,::std::shared_ptr<Command>> commandProcessor;

由于这是一张地图,您可以检查命令是否存在:

auto const it = commandProcessor.find(tokens[0]);
if (it != commandProcessor.end())
  it->second->exec(tokens);
  // you might want to strip the first token from the vector first!

您不熟悉的任何类型/功能,您可以在http://en.cppreference.com/w/

查找

答案 1 :(得分:0)

我要做的是从用户那里获取输入,然后使用&#34;分割字符串。 &#34;作为界限。你仍然有一个嵌套的if语句,但它不需要用户输入两次输入。

请参阅this post以阅读有关在C ++中拆分字符串的更多信息。