如何在哈希表中散列字符串和整数的字符串

时间:2014-03-06 14:00:51

标签: string hash

我正在尝试散列包含2个字母和4个数字的字符串名称。 例如名称(字符串): AZ5466 GE1890 RU0291

并将它们保存在哈希表中。

我想如果有一种方法可以将字符串作为整数引用,那么我可以很容易地做出: (名称%10) - 例如 并将它们散列在链表的数组大小10中。

使用C语言。

2 个答案:

答案 0 :(得分:1)

您可以将每个字符转换为其ascii代码并相乘。

例如,在您的情况下,您可以编写如下内容:

int number = ((name[0] - 'A') * ('Z' - 'A' + 1) + (name[1] - 'A')) * 10000 + atoi(name + 2);

代码假定所有字母都是大写。

顺便说一下,你应该检查是否转换为整数然后模拟某些东西对你来说已经足够了(你需要确保每个桶中的元素数量大致相同)。

如果您愿意,可以通过第一个或任何字母更轻松地拆分它们:

hash = (name[0] - 'A')

会给你一个0到25之间的数字(根据第一个字母)和

hash = (name[5] - '0')

将为您提供与转换为整数(我建议的方式)相同的结果,然后执行模10。

答案 1 :(得分:0)

使用elf_hash,或者您可以使用您正在使用的语言重写它。      unsigned long elf_hash(const char *name);

相关问题