djb2ハッシュ関数に機能を追加しようとしましたが、変更が気に入らないようです。特に、私は単語(文字列)を小文字に変換するループを含めることを試みています。これは、次の2つのエラーをスロー:int
ハッシュ関数の問題 - 機能の追加
char *
に割り当てるポインタへの変換
- 互換性のない整数は、元のコード
*str++
にwhile
ループに現れたタイプchar *[45]
注の値をインクリメントすることはできません。 。これは私の最初のハッシュテーブルですが、私はポインタについてはかなり不安です。私が間違っていた箇所についての洞察は高く評価されます。
// djb2 by Dan Bernstein -- slightly modified;
unsigned int hash_function(const char* str)
{
unsigned int hash = 5381;
int c;
char* string[45];
for (int i = 0; str[i] != '\0'; i++)
{
string[i] = (tolower(str[i]));
}
while (c == *string++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return (hash % LISTS);
}
非常に感謝しています!私はこれがオリジナルの改訂版であり、すべてを小文字に変換しないと思いますか?好奇心の中で、(c | 040)は何を意味するのですか。文字とビットORの組み合わせは珍しいようです。私は最近、ビットレベルで作業を始めました。これは、クールでありながら、心の痛みでもあります@#$&%。 – Ryan
(x | 040)は "x"を小文字に変換し、数字を変更しません。しかし、いくつかのCTRL記号を印刷可能なものに変更します。ただし、これはハッシングの目的には重要ではありません。 – maxihatop