C:地图串ENUM [英] C: Map string to ENUM
本文介绍了C:地图串ENUM的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
可能重复:结果
<一href=\"http://stackoverflow.com/questions/147267/easy-way-to-use-variables-of-enum-types-as-string-in-c\">Easy方式使用枚举类型的变量在C字符串?
块引用>有没有用户输入的字符串转换为一个ENUM值的优雅的方式是直的C,除了手工的方式。
调用一个函数,它接受一个ENUM作为参数的简单的例子:
枚举= {周一,周二,周三};...//获取用户从命令行中输入一周中的一天
...//根据用户输入设置一天的工作
如果(STRCMP(USER_INPUT,MONDAY)== 0){
SET_WORK_DAY(星期一);
}否则如果(STRCMP(USER_INPUT,星期二)== 0){
SET_WORK_DAY(星期二);
}
...感谢
解决方案$猫wd.c
#包括LT&;&stdio.h中GT;#定义mklist(F)\\
F(星期一)F(星期二)F(星期三)#定义f_enum(X)X,
#定义f_arr(X){X,#X},枚举平日{mklist(f_enum)WD_NUM};结构{枚举平日WD;字符*海峡; } wdarr [] = {mklist(f_arr)};INT主(INT ARGC,CHAR *的argv []){
INT I;
对于(I = 0; I&下;的sizeof(wdarr)/的sizeof(wdarr [0]);我++){
如果(的strcmp(的argv [1],wdarr [I]名为.str)== 0){
的printf(%d个%S \\ n,wdarr [I] .wd,wdarr [I]名为.str);
返回0;
}
}
的printf(未找到\\ n);
返回1;
}
$使WD
CC wd.c -o WD
$ ./wd星期一
0星期一
$ ./wd星期二
1星期二
$ ./wd FOODAY
未找到是我最喜欢的方式做这样的事情。这就保证了一致性错误可以在
枚举
和映射阵列之间发生。Possible Duplicate:
Easy way to use variables of enum types as string in C?Is there any elegant way to convert a user input string to an ENUM value is straight C, besides the manual way.
A simplified example of calling a function that takes an ENUM as an argument:
enum = {MONDAY,TUESDAY,WEDNESDAY}; ... //Get user to enter a day of the week from command line ... //Set the work day according to user input if (strcmp(user_input,"MONDAY")==0){ SET_WORK_DAY(MONDAY); } else if (strcmp(user_input,"TUESDAY")==0){ SET_WORK_DAY(TUESDAY); } ...
Thanks
解决方案$ cat wd.c #include <stdio.h> #define mklist(f) \ f(MONDAY) f(TUESDAY) f(WEDNESDAY) #define f_enum(x) x, #define f_arr(x) {x, #x}, enum weekdays { mklist(f_enum) WD_NUM }; struct { enum weekdays wd; char * str; } wdarr[] = { mklist(f_arr) }; int main(int argc, char* argv[]) { int i; for (i=0; i < sizeof(wdarr)/sizeof(wdarr[0]); i++) { if (strcmp(argv[1], wdarr[i].str) == 0) { printf("%d %s\n", wdarr[i].wd, wdarr[i].str); return 0; } } printf("not found\n"); return 1; } $ make wd cc wd.c -o wd $ ./wd MONDAY 0 MONDAY $ ./wd TUESDAY 1 TUESDAY $ ./wd FOODAY not found
is my favorite way to do such things. This ensures that no consistency errors can occur between the
enum
and the mapping array.这篇关于C:地图串ENUM的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文