如何确定用户输入命令
How to determine user input commands
我开始写一个命令行转换器,我唯一关心的是用户输入(休息不会很难)。程序将有一些命令,如(转换2m到km),所以当用户输入,程序将输出转换后的值。我的问题是,解析用户输入并确定用户输入的命令的最佳方法是什么?我是否应该将用户输入划分为单词数组,然后传递给函数,这样它就可以做一些事情,或者有另一种方式?
我已经编写了一些类型的"简单解析器"(以及一些更高级的)。根据你的描述,如果命令是"将2米转换为公里",那么你只需要在空间上分割东西。
当然,如果允许"convert2mtokm"answers"convert2mtokm",处理起来就有点困难了。坚持"单词之间必须有一个(至少一个)空格的严格规则"会让生活变得容易得多。
在这一点上,你将有一个可以处理的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;
}
如果您只有几个命令,那么最好只使用strtok(input, ' ')
,它只是将命令中的字符串拆分为一个单词数组(假设您的命令单词都用空格分隔)。然后,您可以执行一些简单的if/switch检查,以查看用户输入的命令。对于大量的命令(其中一些可能类似),您可能需要实现或至少编写一个DFA(确定性有限自动机)。
结构数组就可以了。结构可能是这样的:
struct cmd
{
char **usrcmd;
void (*fc)();
};
然后您只需要迭代数组并比较用户输入和usrcmd[0]字段(我假设命令是第一个单词)。
然而,如果你有很多用户命令要处理,这个解决方案不是最好的方法。
相关文章:
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- LLVM | codegen 用于带有命令行选项的程序输入功能
- 在命令行上将输入显示到数组中时如何删除 ./a.out?
- 是否可以在命令行中将输入参数传递给可执行文件
- 使用重定向命令从 stdin 读入的字符串"<"输入文件未正确附加
- 使用 (cin) 用户输入将其粘贴到 std::system 中,并在另一个终端中运行带有输入的命令
- 提供变量作为 MATLAB 系统命令的输入参数,以便C++可执行文件
- 使用makefile中的命令行输入
- LLDB:实现接受用户输入的自定义命令
- 如何在窗口上的命令行中读取输入 .in 文件
- C++客户端/服务器聊天应用程序 - 从 Ubuntu 命令窗口扫描输入
- C++使用命令行输入 txt 文件,但打开文件失败
- 如何解析具有简单语法的输入命令
- std::cin 无法将命令行中的用户输入传递给具有 char 类型的变量吗?
- 使用系统命令时发送输入不起作用
- C 错误:从命令行输入更改为变量输入
- vxWorks任务阻塞shell命令输入
- 返回命令输入函数
- 想要创建一个应用程序,它打开控制台,并从用户作为命令输入