функция для проверки соответствия слова искомому слову

#c #if-statement #while-loop #flags

#c #if-оператор #цикл while #флаги

Вопрос:

У меня есть следующее, которое работает, но мне было интересно, есть ли лучший способ. Лучше означает более эффективный и / или более компактный.

Функция проверяет дерево, чтобы увидеть, есть ли слово в дереве.

 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 amp;amp; searchNode->left  != NULL) searchNode = searchNode->left;
        else if (strcmp(word,searchNode->word) > 0 amp;amp; searchNode->right != NULL) searchNode = searchNode->right;
    }while (searchNode->left != NULL || searchNode->right != NULL || strcmp(word,searchNode->word) == 0);    
    
    return returnFlag;
}
  

Комментарии:

1. Вероятно, вы захотите задать этот вопрос при проверке кода .

2. Происходит утечка памяти. Вы выполняете malloc for searchNode , но немедленно заменяете его nodeArray[nodeIdx] выделенным значением, которое теряется

3. Я проголосовал за то, чтобы закрыть это, поскольку требует большего внимания , поскольку оно выходит за рамки этого сайта; Кроме того, оно было отправлено в CR

4. @Blastfurnace Там все закрывается, спасибо, что увеличили нагрузку на всех участников, сделав неправильное перенаправление. Пожалуйста, ознакомьтесь с руководством по проверке кода для пользователей Stack Overflow , прежде чем делать это снова.