-
-
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 tocgets evaluated as a boolean, the last character of a C string'\0'is evaluated tofalseso 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 a lot for this sharing
thank you so much! the one that's widely circulating wouldn't compile. But this one did.