Skip to main content
4 of 4
deleted 344 characters in body

pset5:(speller) Check function does not correctly identify misspelled words

   /**
 * Implements a dictionary's functionality.
 */

#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)
{
    node *tmp;
    tmp=root;
    for(int i=0;word[i]!='\0';i++)
    {
    int a;
    if(word[i]>='A' && word[i]<='Z')
        a=(int)word[i]-65;
    else if(word[i]>='a' && word[i]<='z')
        a=(int)word[i]-97;
    else
        a=26;
    if(tmp->children[a]==NULL)
        return false;
    else 
        tmp=tmp->children[a];
    }
    return tmp->is_word;
}

/**
 * Loads dictionary into memory. Returns true if successful else false.
 */
char name[LENGTH+1];
bool load(const char *dictionary)
{   
    node *newnode;
    FILE* file = fopen(dictionary, "r");
    if (file == NULL)
    {
        printf("Could not open dictionary.\n");
        return false;
    }
    root= calloc(1, sizeof(node));
    while (fscanf(file,"%s\n",name)>0)
    {
        count++;
        node *tmp;
        tmp=root;
        for(int i=0;name[i]!='\0';i++)
        {
            int a;
        if(isalpha(name[i]))
            a=(int)name[i]-97;
        else
            a=26;
        if(tmp->children[a]==NULL)
        {
            newnode=calloc(1, sizeof(node));
            tmp->children[a]=newnode;
            tmp=newnode;
        }
        else
            tmp=newnode;
        }
        tmp->is_word=true;
    }
    // TODO
    fclose(file);
    return true;
}

/**
 * Returns number of words in dictionary if loaded else 0 if not yet loaded.
 */
unsigned int size(void)
{
return count;
}

/**
 * Unloads dictionary from memory. Returns true if successful else false.
 */
bool unload(void)
{   if(root==NULL)
        return false;
    delNode(root);
    return true;
    
}
void delNode(node *tempNode)
{
    for (int i=0;i<27;i++)
    {
        if (tempNode->children[i] != NULL)
            delNode(tempNode->children[i]);
    }
    free(tempNode);

}

OUTPUT

~/workspace/pset5/speller/ (master) $ ./speller texts/ralph.txt

MISSPELLED WORDS

When
grow
up
want
to
be
principal
or
caterpillar
love
you
Principal
Skinner
Ralph
Wiggum

WORDS MISSPELLED: 15
WORDS IN DICTIONARY: 143091
WORDS IN TEXT: 20
TIME IN load: 0.19
TIME IN check: 0.00
TIME IN size: 0.00
TIME IN unload: 0.18
TIME IN TOTAL: 0.37