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
标志进行编译,那么编译器会为您找到此错误。
顺便说一句,这个标志发现了几个错误,你可能想检查一下。
我正在制作一个 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
标志进行编译,那么编译器会为您找到此错误。
顺便说一句,这个标志发现了几个错误,你可能想检查一下。