在C中从String转换为Enum

Nea*_*lon 12 c string enums

是否有一种方便的方法来获取字符串(由用户输入)并将其转换为枚举值?在这种情况下,字符串将是枚举值的名称,如下所示:

enum Day
{
    Sunday = 0,
    Monday = 1,
    ...
}
Run Code Online (Sandbox Code Playgroud)

因此,如果用户给出了Day的名称,则可以将其解析为相应的Enum值.

诀窍是,我有超过500个我正在使用的值,它们分布在多个枚举中.

我知道c#中的Enum.Parse方法,所以在c中有这种形式吗?

wal*_*lyk 15

实现它的标准方法是:

typedef enum {value1, value2, value3, (...) } VALUE;

const static struct {
    VALUE      val;
    const char *str;
} conversion [] = {
    {value1, "value1"},
    {value2, "value2"},
    {value3, "value3"},
       (...)
};

VALUE
str2enum (const char *str)
{
     int j;
     for (j = 0;  j < sizeof (conversion) / sizeof (conversion[0]);  ++j)
         if (!strcmp (str, conversion[j].str))
             return conversion[j].val;    
     error_message ("no such string");
}
Run Code Online (Sandbox Code Playgroud)

反过来应该是显而易见的.