【问题标题】:Getting commands from string input从字符串输入中获取命令
【发布时间】:2009-07-29 04:57:50
【问题描述】:

我有一个以字符串形式获取命令的程序。字符串中的每个字符代表一个命令。下面给出一个命令示例

OBIPC

O - 打开一个文件

B - 将文本设为粗体

I - 将文本设为斜体

P - 打印文本

C - 关闭文件

我的程序必须解析这个字符串并做相应的工作。每个命令按顺序执行。为此,我提出了以下想法。

  1. 为每个命令创建操作类。每个都有一个Execute() 方法并实现一个接口IExecutable。所以如果我有 5 个命令,我将有 5 个类来处理每个命令。
  2. 将可以执行操作的命令和关联对象保存在关联容器中(C++ 中的 std::map 和 .NET 中的 Dictionary)。
  3. 遍历输入字符串中的每个字符。检查与每个角色相关的任何操作。如果是,获取动作对象并调用Execute()。某种命令设计模式。如果某些字符没有关联的操作,则抛出错误或跳过。

这种方法最适合我的问题,还是您认为有任何简单/有效的方法可以做到这一点?这不是特定于任何编程语言的,我对任何编程语言都可以。我正在寻找的只是这样做的想法。

有什么想法吗?

【问题讨论】:

    标签: c# c++


    【解决方案1】:

    是的。这正是我的做法,除了使用 Runnable::run() 而不是 IExececutable::Execute()。

    【讨论】:

      【解决方案2】:

      许多脚本语言允许您调用类似 eval() 的函数,该函数本质上会将字符串作为代码运行。这可能是做类似事情的最简单方法......也是最不安全的。

      【讨论】:

        【解决方案3】:

        每个命令真的需要 5 个类吗?您可以在 .h 中创建一个接口,该接口公开一个接受字符串的函数,该函数有一个参数。在 .cpp 中,您可以有一个从接口继承的类。隐藏在后面的类将负责分析字符串并抛出异常,以防它包含与命令无关的字符(字符的顺序是否重要?)。一旦分析结束,它就可以为每个命令调用一个类函数。

        【讨论】:

          猜你喜欢
          • 2018-11-25
          • 1970-01-01
          • 2020-05-19
          • 1970-01-01
          • 1970-01-01
          • 2012-08-26
          • 1970-01-01
          • 2018-03-01
          • 2011-09-13
          相关资源
          最近更新 更多