2013-08-02 147 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 –