Ich habe versucht, der djb2-Hash-Funktion Funktionalität hinzuzufügen, aber es scheint die Änderungen nicht zu mögen. Insbesondere versuche ich, eine Schleife einzuschließen, die Wörter (Strings) in Kleinbuchstaben konvertiert. Es führt die folgenden zwei Fehler:Problem mit der Hash-Funktion - Hinzufügen der Funktionalität
- Unverträgliche Ganzzahl-Umwandlungs Zeiger auf
char *
vonint
Zuordnung - Wert kann nicht vom Typ dass
*str++
erschienen im ursprünglichen Codechar *[45]
Hinweis Inkrement in der while
loop . Dies ist meine erste Hash-Tabelle, und ich bin ziemlich wackelig auf Zeiger. Jeder Einblick, wo ich falsch gelaufen bin, würde geschätzt werden.
// 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);
}
Sehr geschätzt! Ich nehme an, das ist eine Neuformulierung des Originals und konvertiert nicht alles in Kleinbuchstaben? Aus Neugierde, was genau (c | 040) bedeutet/tut. Die Kombination aus einem Zeichen und einem bitweisen OR erscheint ungewöhnlich. Ich habe erst vor kurzem begonnen, auf der Bit-Ebene zu arbeiten, was sowohl cool als auch total mind @ # $ &% ist. – Ryan
(x | 040) wandelt "x" in Kleinbuchstaben um und ändert die Zahlen nicht. Es ändert jedoch einige STRG-Symbole in einige druckbare Symbole. Dies ist jedoch für Hash-Zwecke nicht wichtig. – maxihatop