CS50拼写器如何测试是否有效

时间:2019-05-16 21:05:17

标签: spell-checking cs50

我认为这段代码加载了字典,但是如何检查它是否有效?

'''  #包括     #include

#include "dictionary.h"


//number of linked lists in hashtable
#define HASH_SIZE 5000

#define长度45

char word;

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

//create hashtable as an array of linked lists
node *hashtable[HASH_SIZE];

bool load(const char *dictionary)
{
    while (fscanf(file, "%s", word) != EOF)
    {
         // malloc a node* for each new word
        node *new_node = malloc(sizeof(node));
        if(new_node == NULL)
        {
            unload();
            return false;
        }
        // else if not pointing to NULL, copy word into node
        else
        {
            strcpy(new_node)→ word, word);
            new_node→next = head;
            head = new_node;
        }
    }
    return false;

int hash_function(const char*word)
{
    int sum=0;
    int word_length = strlen(word);

    for(int i=0; i<word-length; i++)
    {
        sum+ = word[i];
    }
    int bucket = sum % HASH_SIZE;
    return bucket;
}

'''

我认为这段代码加载了字典,但是如何检查它是否有效? 你能帮我吗?请帮助我测试此代码

1 个答案:

答案 0 :(得分:0)

传统的CS50智慧说,load的最终测试是check!一些指针:

  • 考虑注册CS50's own stack forum。在那里,您会发现一个有关CS50的所有知识的社区。
  • 即使此函数加载了字典,拼写者也会抱怨“无法加载字典”,因为它总是返回false。也许按照the spec中的建议再次查看speller.c
  • 此功能不太可能“起作用”。 hashtable被声明并且从不使用。 hash函数已定义且从未使用过。

load成功的第一个衡量标准是它不会崩溃。第二个是在size完成之后,结果显示正确的“ WORDS IN DICTIONARY”。下一个度量是check给出正确的结果(与keys中的文件相比)。

您可能会发现debug50是完成此pset的最好朋友。最后一些智慧的话(也来自规范):

  

在开发过程中,您可能会发现为拼写者提供   您自己的词典中包含的单词要少得多,以免您   努力调试内存中原本巨大的结构。在   字典/小字典就是这样的字典。