重载运算符<要比较字符串,使用string.compare对链表进行排序?

时间:2014-03-28 02:32:32

标签: c++ string class linked-list operator-overloading

如果此代码中的任何内容看起来很奇怪(如指针的不合逻辑用法),那是因为它是一项任务,所以不需要让我知道那里绝对没有理由在这种情况下使用指针。感谢您的帮助。

代码对我有用,除了一件事,insertNode函数使用重载<来自宠物课。该运算符应该使用string.compare()函数比较字符串,并根据结果值返回true或false。但是根本没有完成排序,输入文件只是从头到尾正常读取。

问题出现在下面的代码段中

bool  Pet::operator <(Pet &right)
{
    if (name.compare(right.name) < 0)
        return true;
    else if (name.compare(right.name) > 0)
        return false;
}

在我看来,这没有任何问题会导致任何改变。我还没有能够测试运营商是否正确(&gt; 0和&lt; 0),但我更担心它什么都不做。

1 个答案:

答案 0 :(得分:2)

当字符串相等时,您的比较函数不会处理这种情况。

bool  Pet::operator <(Pet &right)
{
    if (name.compare(right.name) < 0)
        return true;
    else if (name.compare(right.name) > 0)
        return false;
}
如果

string.compare小于它的参数,则返回负值,当它们相等时返回0,当它更大时返回正值。当它返回0时你不处理这种情况,因此它会脱离函数的末尾,这是未定义的行为。

else if更改为:

else if (name.compare(right.name) >= 0)

@Benjamin是对的,你的整个功能可以简化为:

bool  Pet::operator <(Pet &right)
{
    return name.compare(right.name) < 0
}

在回答问题时,我总是以某种方式监督这些事情......