在某些情形下,我们需要根据一些已知的字符串进行相应的处理,比如根据从串口接收到字符串命令执行操作。
假如要通过串口控制某个设备的开启、关闭以及查询等功能,其控制命令 cmd
分别为 OPEN
、CLOSE
、 和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;
}
网友评论