我根据要求进行了一些更新并添加了输出图片。再次感谢大家
再次感谢大家!!
我很抱歉所有的主持人你会讨厌我的问题。我试过阅读这里的一些例子,但我没有得到它。我明天有一个项目,这些是我遇到问题的重载运营商。教授说问题出在我的if语句中,但不会告诉我我做错了什么。
bool MyString::operator==(const MyString &right) const
{
if (strlen(m_pString) != strlen(right.m_pString))
{
return false;
}
for (size_t i = 0; i < strlen(m_pString); ++i)
{
if (m_pString[i] == right.m_pString[i])
{
return false;
}
}
return true;
}
bool MyString::operator!=(const MyString &right) const
{
if (strlen(m_pString) != strlen(right.m_pString))
{
return false;
}
for (size_t i = 0; i < strlen(m_pString); ++i)
{
if (m_pString[i] != right.m_pString[i])
{
return false;
}
}
return true;
}
以下是参考指南:
重载的等于关系运算符(运算符==)
A == B
等于关系运算符用于确定两个MyString对象是否相等。这应该比较两个对象m_pString中的每个字符,以验证两个空终止字符串是否相同。如果字符串相同则返回true,否则返回false。
重载不等于关系运算符(运算符!=)
A!= B
不等于关系运算符用于确定两个MyString对象是否不相等。这应该比较两个对象m_pString中的每个字符。如果角色不匹配,它应立即返回true。如果字符串相同,则应该返回false。
根据我的理解,这段代码应该做到这一点。 VB没有标记任何警告或错误。提前感谢您对我的IF语句的错误提出任何意见。
This is a picture of the Failed out put from the driver program
答案 0 :(得分:5)
1.您将m_pString
的元素与right.m_pString
的长度进行比较。
2.比较逻辑似乎错了。
bool MyString::operator==(const MyString &right) const
{
if (strlen(m_pString) != strlen(right.m_pString))
{
return false;
}
for (size_t i = 0; i < strlen(m_pString); ++i)
{
if (m_pString[i] != right.m_pString[i])
// ~~ ~~~~~~~~~~~~~~~~~~
{
return false;
// ~~~~~
}
}
return true;
// ~~~~
}
3.不要重复类似的逻辑。
bool MyString::operator!=(const MyString &right) const
{
return !operator==(right);
}
答案 1 :(得分:2)
if (m_pString[i] == strlen(right.m_pString))
应该是:
if (m_pString[i] == right.m_pString[i])
您将字符与字符串长度进行比较。
此外,在==
实施中,如果m_pString[i] == right.m_pString[i]
,您不应该返回true。相反,您还需要继续检查所有其他字符,但如果它们是!=
则返回false。
您的!=
实施中存在类似问题。
答案 2 :(得分:2)
您的功能不仅不正确,而且无效,您拨打strlen()
的次数太多了:
bool MyString::operator==(const MyString &right) const
{
for (size_t i = 0; true; ++i)
{
if (m_pString[i] != right.m_pString[i] )
return false;
if (m_pString[i] == 0 )
return true;
}
}