如何确定用户输入命令

时间:2013-05-30 21:38:38

标签: c++ input command

我开始编写一个命令行转换器,我唯一关心的是用户输入(休息不会很难)。该程序将具有很少的命令(转换2米到km),因此当用户输入该命令时,程序将输出转换后的值。我的问题是,解析用户输入和确定用户输入的命令的最佳方法是什么?我应该将用户输入划分为单词数组然后传递给函数,这样它可以做某事还是有另一种方式?

3 个答案:

答案 0 :(得分:1)

如果你只有一些命令,最好只有strtok(input, ' '),它只是将一个字符串拆分成命令中的一个字数组(假设你的命令字都用空格分隔)。然后,您可以执行一些简单的if / switch检查以查看用户输入的命令。对于大量命令(其中一些可能相似),您可能需要实现或至少写出DFA(确定性有限自动机)。

答案 1 :(得分:1)

我写过几种类型的“简单解析器”(以及一些更高级的解析器)。根据您的描述,如果命令是“将2米转换为km”,那么您只需要在空格上拆分。

当然,如果您允许“convert2mtokm”和“将2m转换为km”,则处理起来会更加困难。坚持“严格规则之间必须有一个(至少一个)空格”使生活变得更加容易。

此时,您将拥有可以处理的vector<string> cmd。例如:

if (cmd[0] == "convert")
{
    convert(cmd); 
}

... 

void convert(vector<string> cmd)
{
    double dist = stod(cmd[1]);
    string unit_from = cmd[2]; 
    string unit_to = cmd[4]; 
    if(cmd[3] != "to")
    {
         ... print some error ... 
    }
    double factor = unit_conversion(unit_from, unit_to);
    cout << "that becomes " << dist * factor << " in " << unit_to << endl;
}

答案 2 :(得分:0)

结构数组很好。结构可能是这样的:

struct cmd
{
    char **usrcmd;
    void (*fc)();
};

然后你只需要迭代数组并比较用户输入和usrcmd [0]字段(我假设命令是第一个字)。

但是,如果您要处理大量用户命令,则此解决方案不是最佳方法。