c++ - 比较一个字符串的两半

标签 c++ if-statement text

我正在用 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/

相关文章:

jquery - 文本比较 {{if}} JQuery 模板

c# - 复制一个文本文件

c++ - 从程序集调用 C/C++ 函数 (OSX Mavericks x64)

c++ - 静态数组缓冲区分配

java - 问 : Doing multiple loops and multiple if-statements and if-else-statements || RENTAL CAR CALCULATOR PROJECT

c++ - 为什么 'if(1 == 1 == 1 == 1 == 1);' 为 TRUE 而 'if(-1 == -1 == -1 == -1 == -1);' 为 FALSE?

css - 文本忽略底部填充,无论如何绘制下一行

ios - 尝试使用图像和文本创建 UIButton 时出现奇怪的结果

php - 在 php 扩展中添加两个共享库。 WHO?

c++ - 在类定义中使用内置数组,但将大小推迟到派生类会导致隐藏吗?