#include <stdbool.h> #include "dictionary.h" #include<string.h> #include <stdio.h> #include <stdlib.h> #include<ctype.h> int count=0; node *root=NULL; /** * Returns true if word is in dictionary else false. */ bool check(const char *word) { // TODO for(int i=0;word[i]!='\0';i++) tolower(word[i]); node *tmp; tmp=root; for(int i=0;word[i]!='\0';i++) { int a; if(isalpha(word[i])) a=word[i]-97; else a=26; if(tmp->children[a]==NULL) return false; else if(tmp->children[a]!=NULL) { tmp=tmp->children[a]; } if(i==(strlen(word)-1)) { if(tmp->is_word==true) return true; else return false; } } return false; } /** * Loads dictionary into memory. Returns true if successful else false. */ bool load(const char *dictionary) { node *newnode; FILE* file = fopen(dictionary, "r"); if (file == NULL) { printf("Could not open dictionary.\n"); return false; } while (!feof(file)) { char word[LENGTH+1]; fscanf(file,"%s\n",word); count++; node *tmp; tmp=root; for(int i=0;word[i]!='\0';i++) { int a; if(isalpha(word[i])) a=(int)word[i]-97; else a=26; **Line 76** if(tmp->children[a]==NULL) //line76 { newnode=malloc(sizeof(newnode)); tmp->children[a]=newnode; tmp=newnode; } else if(tmp->children[a]!=NULL) { tmp=newnode; } if(i==(strlen(word)-1)) tmp->is_word=true; } } // TODO return true; } /** * Returns number of words in dictionary if loaded else 0 if not yet loaded. */ unsigned int size(void) { // TODO if(count!=0) return count; else return 0; } /** * Unloads dictionary from memory. Returns true if successful else false. */ bool unload(void) { if(root==NULL) return false; for(int i=0;i<27;i++) if(root->children[i]!=NULL) delNode(root->children[i]); return true; } void delNode(node *tempNode) { for (int i=0;i<27;i++) { if (tempNode->children[i] != NULL) delNode(tempNode->children[i]); } free(tempNode); }