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