Home > Mobile >  Adding words to a hash table in C
Adding words to a hash table in C

Time:10-25

Before proceeding with PSET5 - SPELLER I have decided to practice with a made-up program that takes words from a file and sorts them into a Hash Table, but I think I`m doing something wrong with the Hash Function as I keep getting the following error:

*array subscript is not an integer

table[hash] = n;*

Some of the elements are taken from the task itself to understand how they work. I don`t have any previous knowledge, totally limited to the CS50 course.

Please have a look at my code and maybe give a few pointers to what I am doing wrong. From what I understand - every new word`s first letter goes through Hash Functions and returns a number for the Bucket in which this word goes.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int hash(const char *buffer);

const unsigned int LENGTH = 9;

typedef struct node
{
    char word[LENGTH   1];
    struct node* next;
}
node;

node *table[26] = {NULL};

int hash(const char *buffer)
{
    return toupper(buffer[0]) - 'A';
}

int main(void)
{
    FILE *file = fopen("words", "r");
    if (file != NULL)
    {
        char buffer[LENGTH];
        while (fscanf(file, "%s", buffer) != EOF)
        {
            node *n = malloc(sizeof(node));
            if (n == NULL)
            {
                return 1;
            }
            strcpy(n->word, buffer);
            n->next = NULL;
            table[hash] = n;
        }
        fclose(file);
    }
}

CodePudding user response:

You need to call the function hash(..) , it is not a variable. Your line should be:

table[ hash(n->word) ] = n;
  • Related