【发布时间】:2020-11-21 10:05:51
【问题描述】:
这可能是一些简单的疏忽,但我对为什么第二次比较在以下代码中没有返回 0 感到困惑:
#include <iostream>
int main()
{
std::string text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
std::string text2 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
int result = text2.compare(text);
if (result == 0)
{
std::cout << "strings same" << std::endl;
}
else
{
std::cout << "strings NOT same" << std::endl;
}
result = text2.compare(0, 10, text);
if (result == 0)
{
std::cout << "strings same" << std::endl;
}
else
{
std::cout << "strings NOT same" << std::endl;
}
}
【问题讨论】:
-
仔细阅读docs。它将所有
text与text2的前10 个字符进行比较,这不相等。 -
@fredrik - 明白了!愿意发表您的评论作为答案吗?
-
你想要
text2.compare(0, text.length(), text)。或者,实际上,由于您要比较的只是子字符串的相等性,而不是实际的排序顺序,因此您想要的可能是std::equal:std::equal(std::cbegin(text), std::next(std::cbegin(text), 10), std::cbegin(text2), std::next(std::cbegin(text2), 10))