所以我第一次尝试在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*中的所有单个字符并手动确定哪个枚举"类型?" 它是,但我将使用一大堆枚举变量,这种事情正是我试图避免的.任何有关枚举类型和/或我的设计的帮助或建议都将非常受欢迎.
使用一个字符串数组,其中数组的索引是枚举值.如果字符串都很短,或者所有字符串长度相同,则将字符串存储在数组中是有意义的.否则,使用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 的位置进行不同的定义,但之后依次分配这些值.
| 归档时间: |
|
| 查看次数: |
4921 次 |
| 最近记录: |