辞書のすべての単語にfnv1aハッシュ関数を実装しようとしています(後ですぐにアクセスできるように)。
これはfnv1aハッシュ関数です。
int
fnv1a(unsigned char byte, uint32_t hash)
{
hash = SEED;
// SEED is a constant that I defined
return ((byte ^ hash) * PRIME) % HASHTABLE_SIZE;
}
そして、これは私がload()と呼ばれる関数で単語のハッシュを取得しようとしている方法です:
int hash = fnv1a((unsigned char)*(ptr->word)++, SEED);
完全な機能は次のとおりです。
/**辞書をメモリにロードします。成功した場合はtrueを返し、そうでない場合はfalseを返します。* /
bool
load(const char *dictionary)
{
FILE* fp = fopen("words.txt", "r");
// make new node to store the stuff in
node *ptr = malloc(sizeof(node));
ptr->next = NULL;
// while it's not the end of the file
while(!feof(fp))
{
// store the word in the ptr
fscanf(fp, "%s", ptr->word);
// get hash function for word
int hash = fnv1a((unsigned char)*(ptr->word)++, SEED);
// store word at hash value in hashtable
// if there isn't a word there yet
if (hashtable[hash]->next == NULL)
hashtable[hash]->next = ptr;
// else go to the end of the list and add the word
// haven't done this part yet
if (hashtable == NULL)
{
printf("Didn't work out, bud");
return false;
}
else
return true;
}
このコードをコンパイルするときに発生し続けるエラー(単語をハッシュしようとしている行を指しています):
dictionary.c:70:53: error: lvalue required as increment operand