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 (cmd)
{
case OPEN:
	deviceOpen();
	break;

case CLOSE:
	deviceClose();
	break;

case QUERY:
	deviceQuery();
	break;

default:
	break;
}
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羽墨志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值