I need to write a hash function where I take the ascii values of every letter in a string and write them to a string, after which, I take said string and divide it into sub-sections consisting of 3 integers, get the sum of those integers, and modulo by a given prime number.
For example, if the key were "word", then the ascii values would be:
119 111 114 100
and the string to which I would write them would look like:
"119111114100"
Then get the first 3 sections of 3
119 111 114
Use sscanf to initialize three integers (a, b, c)
a = 119
b = 111
c = 114
Get the sum
sum = a + b + c
and modulo by a predefined prime number
Here's what I thought of:
Ideally I would want to be able to realloc "values" each time it concatenates to the string so that I don't end up wasting too much memory.Code:
int hashString (void *pKey)
{
int i, sum, a, b, c;
char *key, *values, temp[4];
key = (char*)pKey;
values = (char*)calloc(3 * strlen(key) + 1, sizeof(char));
for(i = 0; i < strlen(key); i++)
{
sprintf(temp, "%d", (int)key[i]);
printf("%s is the ascii value\n", temp);
if(strlen(values) == 0){
sprintf(values, "%d", temp);
}
else{
strcat(values, temp);
}
}
sscanf(values, "%3d%3d%3d", &a, &b, &c);
printf("%s is the total string\n", values);
//free(values);
sum = a + b + c;
return sum % SIZE;
}
Another thing, whenever I try to free values, my program crashes.
Any and all help is appreaciated