prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 20.17

是否有一种方法可以switch在字符串上?


不直接。有时,使用一个单独的函数将字符串映射到整数代码,然后在这些代码上进行 switch 是合适的。

#define CODE_APPLE	1
#define CODE_ORANGE	2
#define CODE_NONE	0

switch(classifyfunc(string)) {
	case CODE_APPLE:
		...

	case CODE_ORANGE:
		...

	case CODE_NONE:
		...
}
其中classifyfunc看起来像
static struct lookuptab {
	char *string;
	int code;
} tab[] = {
	{"apple",	CODE_APPLE},
	{"orange",	CODE_ORANGE},
};

classifyfunc(char *string)
{
	int i;
	for(i = 0; i < sizeof(tab) / sizeof(tab[0]); i++)
		if(strcmp(tab[i].string, string) == 0)
			return tab[i].code;

	return CODE_NONE;
}

否则,当然,你可以回退到一个传统的if/else

	if(strcmp(string, "apple") == 0) {
		...
	} else if(strcmp(string, "orange") == 0) {
		...
	}
(一个宏,如Streq()来自问题 17.3 可以使这些比较更方便。)

参见问题 10.1220.1620.1820.29

参考:K&R1 Sec. 3.4 p. 55
K&R2 Sec. 3.4 p. 58
ISO Sec. 6.6.4.2
H&S Sec. 8.7 p. 248


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管