-
-
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; | |
} |
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.
thank you so much! the one that's widely circulating wouldn't compile. But this one did.