我正在用 C++ 构建一个基于文本的游戏,作为我学习中的一个副项目,因此我试图找到一种方法,让字符串在两半中被评估。它会检查第一个词,然后如果这个词被识别,它会看到它后面的词是什么。例如,如果在 getln() 中输入;是“take apple”,它会识别“take”,然后检查字符串的后半部分,看看你到底在拿什么。现在我能想到的唯一方法是让玩家输入“take”,这会导致大量嵌套的 if/else 语句。
最佳答案
你可以试试 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;
由于这是一张 map ,您可以检查命令是否存在:
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/查找
关于c++ - 比较一个字符串的两半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28283292/