【发布时间】:2020-09-24 03:31:12
【问题描述】:
bool String::operator < (const String &s) const
{
int len1 = s.getLength();
int len2 = this->getLength();
int cap;
if(len1>len2) cap = len2;
else cap = len1;
int index=0;
for (int i =0; i < cap;i++)
if (this->buffer[i] != s[i])
index =i;
for (int i= index; i < cap; i++)
if (this->buffer[i] < s[i])
return true;
for (int i= index; i < cap; i++)
if (this->buffer[i] > s[i])
return false;
if (*this == s)
return false;
if (len2>len1)
return false;
if (len2<len1)
return true;
}
我一直在使用这个重载运算符
它正在成功运行。我尽可能测试每一个案例。
但是当我 F7 程序时,它仍然显示 'String::operator
请告诉我我在这个函数中缺少什么?
【问题讨论】:
-
如果您确定您已经处理了所有案例,那么您可以在最后一个
return之前删除if (len2<len1)条件 - 如果它确实是最后一个剩余案例,则它必须始终为真。跨度> -
@IgorTandetnik 是的,我试图删除最后一个如果离开,但如果我这样做,结果将不正确例如:“Test”和“Test1”
-
如果放弃最后一个条件会改变结果,那么您还没有处理所有可能的情况。如果您到达
if (len2<len1)行,结果发现条件不成立并且len2实际上等于len1,那么您的函数会在没有返回的情况下退出,并且编译器可以正确地抱怨。如果在那一行len2总是小于len1,那么条件总是为真并且放弃检查不应该改变结果。你不能同时拥有它;您提出了两个相互矛盾的主张。 -
最后,你的函数声明了
"bb" < "ac"。你是这个意思吗? -
@IgorTandetnik 是的,当我尝试“bb”和“ac”时,它显示错误的结果......为什么
标签: c++ string class overloading operator-keyword