2 不相等的字符串在 == 和 a.compare(b) 上返回真值

2 Unequal strings are returned with true value on == as well as a.compare(b)

我正在制作一个 BST 和 AVL 树来处理字符串键。 在 main 中,我没有添加“600”键,但在找到它时显示找到“600”。

我尝试使用 gdb 进行调试并发现在 2 个不相等的字符串上 == 给出了通过我的 if 子句的真值。

我也试过使用字符串class的compare()函数,还是一样的问题。 请帮忙!

这是我的 findNode 函数:

template<class NodeType>
NodeType* Tree<NodeType>::findNode(string key, NodeType* node)
{
    if ( node == NULL )
        return NULL;
    else if ( node->Key() == key )
        return node;
    else if ( key < node->Key() )
        findNode(key, node->Left());
    else if ( key > node->Key() )
        findNode(key, node->Right());
    else
        return NULL;
}

这是所有代码的 link https://github.com/tshrjn/ADSA/blob/master/bst.cpp

在您的 findNode 方法中,您在对 findNode(...left...)findNode(...right...):

的递归调用中缺少 return
template<class NodeType>
NodeType* Tree<NodeType>::findNode(string key, NodeType* node)
{
    if ( node == NULL )
        return NULL;
    else if ( node->Key() == key )
        return node;
    else if ( key < node->Key() )
        return findNode(key, node->Left());
    else if ( key > node->Key() )
        return findNode(key, node->Right());
    else
        return NULL;
}

您的实施在这些情况下(大多数情况下)返回垃圾。


如果您使用 -Wall 标志进行编译,那么编译器会为您找到此错误

顺便说一句,这个标志发现了几个错误,你可能想检查一下。