检查trie数据结构中的撇号

时间:2017-03-11 22:43:53

标签: c spell-checking trie

我有一个字典文件(包含只有小写和撇号的单词)作为特里树加载。

我有一个检查函数,如果它们存在于trie中,它会检查文件的单词树,不管字母的情况。

一切都很好,除了撇号的单词总是被发现拼写错误。

这是我的功能

bool check(const char *word)
{
    // creat arrow to follow letters
    NODE* arrow = root;

    // for every letter in word
    for (int i = 0, length = strlen(word); i < length; i++)
    {
        int index;
        if(word[i] == '\'')
        {
           index = 26;
        } else {
              index = tolower(word[i]) - ASCII_DIFFERENCE;
        }

        // if NULL? creat a new one and move arrow to new child
        if (arrow->child[index] == NULL) 
        {
            return false;
        } else if (arrow->child[index] != NULL)  // not null?
        {
            arrow = arrow->child[index];
        } 
    }

    return arrow->isWord;
}  

我的结构:

typedef struct NODE
{
    bool isWord;
    struct NODE* child[ALPHA_SIZE];
} NODE;

定义

#define ASCII_DIFFERENCE 'a'

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

撇号是十六进制27,十进制39.我认为你使用了错误的幻数。