3 回答
TA贡献1801条经验 获得超16个赞
如果您有很多情况,并且不想写大量strcmp()电话,则可以执行以下操作:
switch(my_hash_function(the_string)) {
case HASH_B1: ...
/* ...etc... */
}
您只需要确保您的哈希函数在该字符串的可能值集中没有冲突。
TA贡献1829条经验 获得超7个赞
用C语言无法做到这一点。有许多不同的方法。通常,最简单的方法是定义一组代表您的字符串的常量,然后按字符串进行查找以获取常量:
#define BADKEY -1
#define A1 1
#define A2 2
#define B1 3
#define B2 4
typedef struct { char *key; int val; } t_symstruct;
static t_symstruct lookuptable[] = {
{ "A1", A1 }, { "A2", A2 }, { "B1", B1 }, { "B2", B2 }
};
#define NKEYS (sizeof(lookuptable)/sizeof(t_symstruct))
int keyfromstring(char *key)
{
int i;
for (i=0; i < NKEYS; i++) {
t_symstruct *sym = lookuptable[i];
if (strcmp(sym->key, key) == 0)
return sym->val;
}
return BADKEY;
}
/* ... */
switch (keyfromstring(somestring)) {
case A1: /* ... */ break;
case A2: /* ... */ break;
case B1: /* ... */ break;
case B2: /* ... */ break;
case BADKEY: /* handle failed lookup */
}
当然,有更有效的方法可以做到这一点。如果对键进行排序,则可以使用二进制搜索。您也可以使用哈希表。这些事情以牺牲维护成本为代价来改变您的性能。
- 3 回答
- 0 关注
- 455 浏览
添加回答
举报