【问题标题】:Overloaded Operator < to compare strings, sort linked list using string.compare?重载运算符 < 比较字符串,使用 string.compare 对链表进行排序?
【发布时间】:2014-05-07 08:11:55
【问题描述】:

如果这段代码中的任何内容看起来很奇怪(比如不合逻辑地使用指针),那是因为它是用于赋值的,所以无需让我知道在这种情况下绝对没有理由使用指针。感谢您提前提供帮助。

代码对我有用,除了一件事,insertNode 函数使用 Pet 类中的重载

问题出在下面的sn-p

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

在我看来,这并没有什么问题,不会导致任何改变。我无法测试运算符是否正确(> 0 和

【问题讨论】:

  • 找到正确的代码部分和正确的发布数量有时很难,但你的问题确实有点太长了。
  • 您最好只包含您认为与您的问题特别相关的内容。如果查看您的问题的人需要更多信息,他们会这样说,您可以添加。通过在此处添加所有内容,无论其重要性如何,问题都太长而无法详细阅读,大多数读者几乎会跳过其中的绝大多数内容。

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


【解决方案1】:

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

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
}

我总是在回答问题时监督这些事情......

【讨论】:

  • 或者你可以完全放弃 if/else 并且简单地 return name.compare(right.name) &lt; 0; -- 或者更好的是 return name &lt; right.name;
  • @BenjaminLindley 添加到我的答案中。不知何故,我在回答问题时倾向于监督他们……不知道为什么。
猜你喜欢
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多