将令牌插入哈希表的问题

时间:2019-03-22 18:38:46

标签: c hashtable strtok

我正在编写一个程序来解析大型文本文件,计算每个单词出现的次数,然后使用该数据执行其他计算和比较。此刻,我遇到一个与我的hashTable insert()方法和我正在使用收集词的令牌之间的交互相关的问题。

我试图缩小发生错误的位置,但由于我似乎无法找到确切的位置,所以我必须忽略了一些东西。

下面是insert方法的代码:

void insert(struct table * t, char *key)
{
    int pos = hashCode(t,key);
    struct node *list = t->list[pos];
    struct node *newNode = (struct node*)malloc(sizeof(struct node));
    struct node *temp = list;
    while(temp != NULL)
    {
        if(strcmp(temp->key, key) == 0)
        {

            temp->count+=1;
                             printf("Match found, count incremented");
            return;
        }
        temp = temp->next;
    }
    newNode->key = key;
    newNode->count = 1;
    newNode->next = list;
    t->list[pos] = newNode;
    return;
}

该方法应该为传递给该函数的单词创建一个哈希码,然后,如果该哈希码已经存在,则在链接列表中进行迭代,如果找到完全匹配的单词,则增加该单词的数量。否则,它将创建一个新节点并将其添加到哈希表中。 这是我用来解析文件的方法的相关代码,在开发的这个阶段,我只想忽略delim的空白字符:

    char delim[] = " \t\r\n\v\f";
    while((nread = getline(&line, &len, fp)) != -1) {

        char * token = strtok(line, delim);
            printf("line grabbed. %s\n", filename);
        while(token != NULL) {
                printf("Tok: %s\n", token);
            insert(t, token);
                printf("Inserted: %s Count: %d\n", lookup(t, token)->key, lookup(t, token)->count);
            token = strtok(NULL, delim);
        }
    }

在调用insert方法以获取重复标记(即文件中“ word”的第二个实例)后发生错误。insert语句被调用,并且成功将其识别为重复并递增,但不会继续通过代码到达下一个打印语句(插入的语句)。

输出显示如下:

Table created, attempting to fill.
line grabbed. t2.txt
Tok: word
Inserted: word Count: 1
Tok: word
Match found, count incremented

任何人都可以洞悉我在实施过程中出了哪些问题吗?

编辑:输入文件为

word word   word
word 


0 个答案:

没有答案