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;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容