我已经尝试了一切。甚至java的论坛:
java.lang.String.hashCode():
s[0]*(31^(n-1)) + s[1]*(31^(n-2)) + ... + s[n-1]
我将此解释为总和: 虽然我不太清楚如何处理s [n-1];
int hashmap::hashstr( const char*const str )
{
int result = 0;
int i = 0;
int j = 0;
int k = 0;
unsigned n = 0;
for ( ; str[n] != NULL; ++n ); // how many characters?
while ( j != n ) // no more characters
{
result += str[i] * ( 31 ^ ( n - k ) );
j++;
i++;
k++;
}
return result % maxSize;
}
其中maxSize是我的固定数组大小为11的第10个元素。
我做错了什么?我的一些哈希指标出错了。其他人,正确。为什么是这样?到目前为止,每个人都喜欢,“谁在乎它的运作方式!使用模板!”好吧,我想理解这个..
答案 0 :(得分:7)
s[0](31^(n-1)) + s[1](31^(n-2)) + ... + s[n-1]
在公式^
中表示取幂,而不是按位xor
操作。
查看this SO问题。
答案 1 :(得分:3)
unsigned n = 0;
for ( ; str[n] != NULL; ++n ); // how many characters?
你知道你可以使用strlen(str)
,对吧?
这一行:
return result % maxSize;
这个result
来自哪里?我没有看到任何result
变量。
答案 2 :(得分:0)
从这段代码开始,您可以执行以下操作:
void function (const char *str)
{
while (*str)
{
/* process whatever with *str which is the same as str[i] in a for loop */
str++;
}
}
此外,您不需要在const char *const
个参数上使用第二个const。 const char *
没问题。