Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 映射枚举和字符串_C_Arrays_String_Enums - Fatal编程技术网

C 映射枚举和字符串

C 映射枚举和字符串,c,arrays,string,enums,C,Arrays,String,Enums,我有一个数组sayarr[3],我使用枚举索引到数组say中 typedef enum { ABC, DEF, XYZ }INDEX; 我将值存储在数组中为ar[ABC]=100,以此类推。。。 现在我有一个文件,它的字符串是xyZ=2,dEF=3,abc=4。我解析这个文件并检查字符串。如果字符串是xyZ,那么我需要将值存储在数组arr[xyZ]中,依此类推。。我对用枚举映射字符串感到惊讶。我如何知道文件中字符串的枚举索引。有什么想法吗。希望我清楚。谢谢你可以把'a'作为索引0 #inclu

我有一个数组say
arr[3]
,我使用枚举索引到数组say中

typedef enum {
ABC,
DEF,
XYZ
}INDEX;
我将值存储在数组中为
ar[ABC]=100
,以此类推。。。
现在我有一个文件,它的字符串是
xyZ=2,dEF=3,abc=4
。我解析这个文件并检查字符串。如果字符串是
xyZ
,那么我需要将值存储在数组
arr[xyZ]
中,依此类推。。我对用枚举映射字符串感到惊讶。我如何知道文件中字符串的枚举索引。有什么想法吗。希望我清楚。谢谢你可以把
'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;
}
#包括
类型定义枚举{
美国广播公司,
DEF,
GHI,
JKL,
嗯,,
PQR,
斯图,
VWX,
YZ,,
N
}指数;
#定义GET_索引(x)((x)-‘a’)/3)
内部主(空)
{
字符*s[]={“abc”、“def”、“mno”、“def”};
int i,arr[N]={0};
对于(i=0;i<4;i++){
arr[GET_INDEX(s[i][0])]+=1;
}
对于(i=0;i
不幸的是,在C语言中,没有内置的字符串到枚举的强制。你需要自己做这件事。哈希表(如H2CO3所述)是一种很好的方法。或者,如果枚举值的数量很小,请使用
if
语句和
stricmp
。感谢您的回复。知道Enum吗?除了其他专家建议的哈希表之外。能给我一个
char*s[]={“abc”,“def”,“xyz”}
并将其索引用作枚举索引?我认为在
s[]
中放置更多元素会占用更多空间。你不能对枚举进行字符串化,你需要一个哈希函数(并注意冲突),我已经编辑了我的答案以供使用枚举,它非常快,并且将“a”作为索引0