【问题标题】:Mapping enum and string映射枚举和字符串
【发布时间】:2013-08-02 07:00:10
【问题描述】:

我有一个数组说arr[3],我使用枚举来索引数组说

typedef enum {
ABC,
DEF,
XYZ
}INDEX;

我将值存储在数组中为ar[ABC] = 100 等等... 现在我有一个字符串为xyZ = 2, dEF = 3, abc = 4 的文件。我解析这个文件并检查字符串。如果字符串是xyZ,那么我需要将值存储在数组arr[XYZ] 中,依此类推。我在用枚举映射字符串时感到震惊。我如何知道枚举索引与文件中的字符串。请有任何想法。希望我清楚。谢谢

【问题讨论】:

  • 不幸的是,在 C 中没有内置的字符串强制转换为枚举。你需要自己做这件事。哈希表(如 H2CO3 所说)是一种好方法。或者如果枚举值的数量很少,请使用if 语句和stricmp

标签: c arrays string enums


【解决方案1】:

你可以将'a'作为索引0

#include <stdio.h>

typedef enum {
    ABC,
    DEF,
    GHI,
    JKL,
    MNO,
    PQR,
    STU,
    VWX,
    YZ,
    N
} INDEX;

#define GET_INDEX(x) (((x) - 'a') / 3)

int main(void)
{
    char *s[] = {"abc", "def", "mno", "def"};
    int i, arr[N] = {0};

    for (i = 0; i < 4; i++) {
        arr[GET_INDEX(s[i][0])] += 1;
    }
    for (i = 0; i < N; i++) {
        printf("arr[%d]=%d\n", i, arr[i]);
    }
    return 0;
}

【讨论】:

  • 感谢您的回复。对枚举有任何想法吗?除了其他专家建议的哈希表。我可以有一个char *s[] = { "abc","def","xyz"}; 并将其索引用作枚举索引吗?我认为s[]中的更多元素会占用更多空间。
  • 你不能 stringize 枚举,你需要一个哈希函数(并处理冲突),我已经编辑了使用枚举的答案,它非常快并且需要'a' 作为索引 0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 2017-12-06
  • 2019-01-29
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多