2013-08-02 98 views
1

我有一个数组说arr[3],我用枚举索引到数组说映射枚举和字符串

typedef enum { 
ABC, 
DEF, 
XYZ 
}INDEX; 

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

+2

使用一个哈希表? – 2013-08-02 07:01:53

+1

不幸的是,在C语言中,没有内建强制字符串的枚举。你需要自己做。哈希表(如H2CO3所说)是一个好方法。或者,如果枚举值的数量很小,则使用'if'语句和'stricmp'。 – Bathsheba

回答

0

您可以'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; 
} 
+0

感谢您的回复。任何想法与枚举?除了其他专家建议的哈希表。我可以有一个'char * s [] = {“abc”,“def”,“xyz”};'并且使用它的索引作为枚举索引?我认为''''中的更多元素需要更多空间。 –

+0

你不能**把一个枚举串起来,你需要一个散列函数(并且处理冲突),我已经编辑了使用枚举的答案,它的速度非常快,并且以'a'作为索引0 –