为什么 std:string 在比较相同文本的子字符串时不返回 0?
Why is std:string not returning 0 on comparing sub strings of same text?
这可能是一些简单的疏忽,但我对为什么在以下代码中第二次比较不 return 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;
}
}
因为compare函数在传入pos & len参数时,将整个第一个字符串与第二个字符串进行比较。第一个字符串比您正在比较的第二个字符串的一部分长。
如果您还对第一个字符串进行子字符串化,那么它将 return 为真
result = text2.compare(0, 10, text, 0, 10);
上面的调用调用了这个重载
int compare (size_t pos, size_t len, const string& str,
size_t subpos, size_t sublen) const;
subpos 和 sublen 是要比较的第一个字符串的 pos 和长度。
这可能是一些简单的疏忽,但我对为什么在以下代码中第二次比较不 return 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;
}
}
因为compare函数在传入pos & len参数时,将整个第一个字符串与第二个字符串进行比较。第一个字符串比您正在比较的第二个字符串的一部分长。
如果您还对第一个字符串进行子字符串化,那么它将 return 为真
result = text2.compare(0, 10, text, 0, 10);
上面的调用调用了这个重载
int compare (size_t pos, size_t len, const string& str,
size_t subpos, size_t sublen) const;
subpos 和 sublen 是要比较的第一个字符串的 pos 和长度。