从字符串输入获取命令

时间:2009-07-29 04:57:50

标签: c# c++

我有一个程序,它将命令作为字符串。字符串中的每个字符代表一个命令。命令的一个例子如下:

OBIPC

O - 打开文件

B - 以粗体显示文字

I - 以斜体显示文字

P - 打印文本

C - 关闭文件

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

  1. 为每个命令创建操作类。每个都有一个 Execute()方法,并实现一个接口 IExecutable 。因此,如果我有5个命令,我将分别有5个类来处理每个命令。
  2. 保留可在关联容器中执行操作的命令和关联对象(在C ++中为 std :: map ,在.NET中为 Dictionary )。
  3. 循环输入字符串中的每个字符。检查与每个角色相关的任何操作。如果是,请获取操作对象并调用 Execute()。某种命令设计模式。如果某些字符没有关联的操作,则抛出错误或跳过。
  4. 这种方法对我的问题是最好的还是你看到任何简单/有效的方法来做到这一点?这不是特定于任何编程语言,我可以使用任何编程语言。我正在寻找的只是想要做到这一点。

    有什么想法吗?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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