在 C 中从字符串转换为枚举

标签 c string enums

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

enum Day
{
    Sunday = 0,
    Monday = 1,
    ...
}

这样,如果用户给出日期的名称,它就能够将其解析为相应的枚举值。

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

我知道 C# 中的 Enum.Parse 方法,那么在 C 中有这种形式吗?

最佳答案

实现它的标准方法是:

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");
}

反之亦然。

关于在 C 中从字符串转换为枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16844728/

相关文章:

c++ - 为什么编译器在显然没有错误的情况下在这里提示?

java - 如何确定从 Java 文本文件中读取的最大值和最小值

asp.net - 删除 SQL 更新中 WHERE 之前的最后一个逗号

c++ - 我如何制作和填充枚举类型的数组

c# - 如何测试按位枚举是否包含 C# 中另一个按位枚举的任何值?

c - 如何使用 OpenSSL 计算 SHA512/224 和 SHA512/256 哈希值?

c++ - 是否有任何理由避免使用 tmpnam() 来获取临时文件的名称?

php - 如何在不分割单词的情况下缩短字符串,同时保持在 PHP 中的字符限制内

c# - 如何将枚举转换为 C# 中的列表?

c - 尝试使用 execle 时预期参数声明符错误