微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检查单词是否与搜索单词匹配的功能

如何解决检查单词是否与搜索单词匹配的功能

我有以下可行的方法,但想知道是否有更好的方法。更好的意思是更有效和或更紧凑。

功能检查一个Trie,以查看单词是否在Trie中。

bool check(const char *word)
{        
    int nodeIdx = hash(word);     
    if (nodeIdx < 0)return false;       

    nodeWords * searchNode;    
    searchNode = nodeArray[nodeIdx];  //nodeArray is global    
    bool whileFlag = true,returnFlag = false;
    
    do
    {
        if (strcmp(word,searchNode->word) == 0 ) 
        {
            whileFlag = false;
            returnFlag = true;
        }
        else if (strcmp(word,searchNode->word) < 0 )
        {            
            if(searchNode->left == NULL)
            {
                whileFlag = false;
            }else{
                searchNode = searchNode->left;
            }
        }else{               
            if(searchNode->right == NULL)
            {                
                whileFlag = false;
            }else{
                searchNode = searchNode->right;
            }
        }
    }while (whileFlag);    

    free(searchNode);    
    return returnFlag;
}

例如,我们可以这样重写函数

bool check(const char *word)
{   
    int nodeIdx = hash(word);   
    if (nodeIdx < 0)return false;    

    nodeWords * searchNode; 
    searchNode = nodeArray[nodeIdx];    
    bool returnFlag = false;    

    do
    {
        if (strcmp(word,searchNode->word) == 0 )returnFlag = true;
        else if (strcmp(word,searchNode->word) < 0 && searchNode->left  != NULL) searchNode = searchNode->left;
        else if (strcmp(word,searchNode->word) > 0 && searchNode->right != NULL) searchNode = searchNode->right;
    }while (searchNode->left != NULL || searchNode->right != NULL || strcmp(word,searchNode->word) == 0);    
    
    return returnFlag;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。