gpt4 book ai didi

将 Char* 与 C 中的 Enum 变量进行比较

转载 作者:行者123 更新时间:2023-12-02 08:29:04 29 4
gpt4 key购买 nike

所以我第一次尝试在 C 中使用枚举类型。所以我有一个枚举的“变量”?声明,我还有一个结构,它有一个枚举类型的变量(除其他外)。最后我有一个静态数组,其中有一个包含每个枚举“类型”的元素?按照宣布的顺序。我希望使用枚举类型作为数组的索引。

所以我的问题是我需要以某种方式将 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)

那么给定 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 };

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

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

枚举到字符串的转换很简单etable[e-plugh]。这些允许对 enum_t 进行不同的定义,其中第一个有意义的值可能不是 0,但随后会按顺序分配值。

关于将 Char* 与 C 中的 Enum 变量进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29302872/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com