-
-
Save MohamedTaha98/ccdf734f13299efb73ff0b12f7ce429f to your computer and use it in GitHub Desktop.
// Djb2 hash function | |
unsigned long hash(char *str) { | |
unsigned long hash = 5381; | |
int c; | |
while ((c = *str++)) | |
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ | |
return hash % NUM_BUCKETS; | |
} |
thank you so much! the one that's widely circulating wouldn't compile. But this one did.
its not compiling and its saying "conflicting types for 'hash'" and looks like the unsigned long hash(char *str) and then again unsigned long hash = 5381 are conflicting
Thank you for the code! :D
its not compiling and its saying "conflicting types for 'hash'" and looks like the unsigned long hash(char *str) and then again unsigned long hash = 5381 are conflicting
Write like it this:
unsigned long hash = 5381L;
thanks very cool
hi I'm noob
what does while ((c=*str++)) means?
hi I'm noob what does while ((c=*str++)) means?
Hi,
In C when you do an assignment like x = 2
, it's considered a function, so if(x = 2)
would be evaluated as true
.
Now if we break down the statement in the while we:
- de-reference str (
*str
), in other words, we get the character at this address in the string. - we assign the value to
c
. - we advance the str pointer to the next character (
str++
).
As said earlier, the character assigned toc
gets evaluated as a boolean, the last character of a C string'\0'
is evaluated tofalse
so the while loop exits when reaching the end of the string.
Hope that helped!
Thanks for the code! helped me build a hash table for CS50 course.
Thanks for the code - really helped!!