我正在尝试散列包含2个字母和4个数字的字符串名称。 例如名称(字符串): AZ5466 GE1890 RU0291
并将它们保存在哈希表中。
我想如果有一种方法可以将字符串作为整数引用,那么我可以很容易地做出: (名称%10) - 例如 并将它们散列在链表的数组大小10中。
使用C语言。
答案 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);