У меня возникли проблемы с секцией загрузки pset5 на CS50, было бы здорово, если бы кто-то мог помочь. Я пытаюсь загрузить trie, который читает из словаря (файл fp ниже), а затем повторяется через буквы, чтобы создать trie.CS50 pset5 Функция загрузки
Я понимаю концепцию построения trie, но я думаю, что мне не хватает чего-то с тем, как настроены указатели на структуру (надеюсь, я не отстаю от трека с приведенным ниже кодом). Я попытался настроить «ловушку» для навигации по каждому этапу попытки.
В настоящее время я получаю ошибку сегментации, поэтому не совсем уверен, куда идти дальше. Любая помощь будет широко оценена.
/**
* Loads dictionary into memory. Returns true if successful else false.
*/
bool load(const char* dictionary)
{
//create word node and set root
typedef struct node {
bool is_word;
struct node* children[27];
} node;
node* root = calloc(1, sizeof(root));
root -> is_word = false;
node* trav = root;
//open small dictionary
FILE* fp = fopen(dictionary, "r");
if (fp == NULL)
{
printf("Could not open %s.\n", dictionary);
return false;
}
//read characters one by one and write them to the trie
for (int c = fgetc(fp); c != EOF; c = fgetc(fp))
{
//set index using to lower. Use a-1 to set ' to 0 and other letters 1-27
int index = tolower(c)-('a'-1);
//if new line (so end of word) set is_word to true and return trav to root)
if (index == '\n')
{
trav->is_word = true;
trav = root;
}
//if trav-> children is NULL then create a new node assign to next
//and move trav to that position
if (trav->children[index] == NULL)
{
node* next = calloc(1, sizeof(node));
trav->children[index] = next;
trav = next;
}
//else pointer must exist so move trav straight on
else {
trav = trav->children[index];
}
}
fclose(fp);
return false;
}
Не прочитал вопрос, просто слепое предложение, вы проверили [cs50.se]? –
Да, просмотрели все видео и пошаговые руководства, но все равно ударились головой о стену – jamiej
, какое видео? Я говорю о сайте SE .. вы проверяете ссылку в своем комментарии? –