比较C中的Char*和Enum变量

que*_*ngs 2 c enums

所以我第一次尝试在C中使用Enumerated类型.所以我有一个枚举"变量?" 声明,我也有一个结构,其中包含一个Enumerated类型的变量(以及其他内容).最后我有一个静态数组,其中有一个元素包含每个枚举"类型?" 他们被宣布的顺序相同.我希望使用枚举类型作为数组的索引.

所以我的问题是我需要以某种方式将char*变量与枚举类型相关联.如果我知道Char*变量是枚举类型之一,是否有某种方法断言,而不必查看每个char来确定它是哪个特定枚举"选项"?

例:

enum example = {abc,def}
struct _strExample {
       enum example letters;
       ....
};
typedef struct  _strExample strEx;
static strEx Table[2] = {
      {abc,...}
      {def,...}
};
//Given char* "abc" , want either example.abc or 0 ( correct index of table) 
Run Code Online (Sandbox Code Playgroud)

所以给定char*"abc"(不需要是char*),是否有一种简单的方法可以获得正确的枚举"类型?"(abc或def)或表的正确索引?我知道我可以检查char*中的所有单个字符并手动确定哪个枚举"类型?" 它是,但我将使用一大堆枚举变量,这种事情正是我试图避免的.任何有关枚举类型和/或我的设计的帮助或建议都将非常受欢迎.

Mik*_*sky 5

使用一个字符串数组,其中数组的索引是枚举值.如果字符串都很短,或者所有字符串长度相同,则将字符串存储在数组中是有意义的.否则,使用char*指针.

typedef enum enum_t { plugh, plover, xyzzy, y0 } enum_t;
const char *etable = { "plugh", "plover", "xyxxy", "y0", NULL };
Run Code Online (Sandbox Code Playgroud)

有了它,您可以通过简单的搜索转换,如:

enum_t find_enum(char *sval)
{
    enum_t result=plugh; /* value corresponding to etable[0] */
    int i=0;
    for (i=0; etable[i]!=NULL; ++i, ++result)
        if (0==strcmp(sval, etable[i])) return result;
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

enum-to-string转换很简单etable[e-plugh].这些允许对enum_t第一个有意义值可能不为0 的位置进行不同的定义,但之后依次分配这些值.

  • 好的解决方案 但是你有一个小错字:`etable`应该是`char*etable []`.另外,没有`typedef`,类型必须是C中的`enum enum_t`,带有`enum`关键字. (2认同)