C:地图串ENUM [英] C: Map string to ENUM

查看:152
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆