C 语言 switch 语句匹配字符串的方法

在某些情形下,我们需要根据一些已知的字符串进行相应的处理,比如根据从串口接收到字符串命令执行操作。

假如要通过串口控制某个设备的开启、关闭以及查询等功能,其控制命令 cmd 分别为 OPENCLOSE、 和QUERY

利用C语言标准库函数 int strcmp(const char *str1, const char *str2) 来找出每一个控制命令,然后执行相应的操作:

char cmd[10] = "OPEN";
if (0 == strcmp("OPEN", cmd))
{
    deviceOpen();
}
else if (0 == strcmp("CLOSE", cmd))
{
    deviceClose();
}
else if (0 == strcmp("QUERY", cmd))
{
    deviceQuery();
}
else
{
    return;
}

这种实现方法虽然也达到了目的,但似乎没有那么直观,如果控制命令较多时,容易产生混乱,增加了出错的几率。相对而言,switch 就清晰明了很多,那么能不能在 switch 中实现字符串的匹配呢?

在 C 语言中,switch 语句中的表达式必须是常量表达式,且必须是整型或者枚举类型,所以 switch 语句不能直接匹配字符串。重点来了,既然 switch 语句能够匹配枚举类型,那么创建一个包含所有控制命令的枚举类型,上述问题就迎刃而解了。

enum COMMAND { OPEN, CLOSE, QUERY };

enum COMMAND cmd = OPEN;

switch (ctl)
{
case OPEN:
    deviceOpen();
    break;

case CLOSE:
    deviceClose();
    break;

case QUERY:
    deviceQuery();
    break;

default:
    break;
}

你可能感兴趣的:(C 语言 switch 语句匹配字符串的方法)