Hi All,
I am writing hash function (similar to multimap concept of c++ : duplicate keys are allowed) in order to check the anagrams.
but i am not getting desired result . Could you suggest efficient solution for the same.
output:
key[148]:val[joy]
key[174]:val[jam]
key[294]:val[paula]
key[13]:val[ulrich]
key[174]:val[cat]
key[174]:val[act]
key[148]:val[yoj]
key[265]:val[vij]
key[265]:val[jiv]
here key value 174 is fine for strings act and cat (anagrams) but same can't be expected with jam.
below is the code snippet.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
unsigned long hash(char *str, size_t size)
{
unsigned long hash_val = 5381;
unsigned long sum=0;
char* val ;
int i,j;
for ( j=0;j<9;j++)
{ val=malloc(strlen(str)+1);
memset(val,'\0',strlen(str)+1);
strcpy(val,str);
for (i=0;val[i]!='\0';i++ )
{
sum=sum+val[i];
}
return size%sum;
}
}
int main()
{
int i;
char *str[9]={"joy","jam","paula","ulrich","cat","act","yoj","vij","jiv"};
unsigned long key;
size_t size=4542;// it may be anything just for test it is being used
for(i=0;i<9;i++)
{
key= hash(str[i],size);
printf("\nkey[%ld]:val[%s]",key,str[i]);
}
return 1;
}