对于由小写字母构成的长度受限(<= 10) 的字符串,可以取得和字符串唯一对应的哈希值。
函数如下:
unsigned long long getHash(char string[])
{
unsigned long long ret = 0;
int i = 0;
while( string[i] != '\0')
{
ret = (ret << 5) + (string[i] - 'a' + 1);
//std::cout << ret << std::endl;
++i;
}
while( i++ < 10)
{
ret = (ret << 5);
// std::cout << ret << std::endl;
}
//std::cout << std::endl;
return ret;
}
下面的函数是一种比较容易写错的:
unsigned long long getHash(char string[])
{
unsigned long long ret = 1;
int i = 0;
while( string[i] != '\0')
{
ret = (ret << 5) + (string[i] - 'a');
//std::cout << ret << std::endl;
++i;
}
while( i++ < 10)
{
ret = (ret << 5);
// std::cout << ret << std::endl;
}
// std::cout << std::endl;
return ret;
}
对于这个函数, "fw", 和 "fwa"具有相同的值。