在某些情形下,我們需要根據(jù)一些已知的字符串進(jìn)行相應(yīng)的處理沦泌,比如根據(jù)從串口接收到字符串命令執(zhí)行操作蛔六。
假如要通過串口控制某個(gè)設(shè)備的開啟、關(guān)閉以及查詢等功能召耘,其控制命令 cmd
分別為 OPEN
、CLOSE
褐隆、 和QUERY
污它。
利用C語言標(biāo)準(zhǔn)庫函數(shù) int strcmp(const char *str1, const char *str2)
來找出每一個(gè)控制命令,然后執(zhí)行相應(yīng)的操作:
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;
}
這種實(shí)現(xiàn)方法雖然也達(dá)到了目的庶弃,但似乎沒有那么直觀衫贬,如果控制命令較多時(shí),容易產(chǎn)生混亂虫埂,增加了出錯(cuò)的幾率祥山。相對(duì)而言,switch
就清晰明了很多掉伏,那么能不能在 switch
中實(shí)現(xiàn)字符串的匹配呢缝呕?
在 C 語言中,switch
語句中的表達(dá)式必須是常量表達(dá)式斧散,且必須是整型或者枚舉類型供常,所以 switch
語句不能直接匹配字符串。重點(diǎn)來了鸡捐,既然 switch
語句能夠匹配枚舉類型栈暇,那么創(chuàng)建一個(gè)包含所有控制命令的枚舉類型,上述問題就迎刃而解了箍镜。
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;
}