string :: compare superfluous参数?

时间:2010-11-20 15:46:26

标签: c++ stl

C++ reference on string::compare中,存在以下重载:

int compare ( size_t pos1, size_t n1, const string& str, size_t pos2, size_t n2 ) const;

有两个参数n1n2在我看来应始终相等或函数返回int等于true(string :: compare返回值) 0(假)表示相等的字符串)。它是否正确?如果没有,您是否可以提供一个示例,说明如果比较不等长度(false),则比较为n1 != n2的特定情况?

谢谢!

3 个答案:

答案 0 :(得分:8)

  在我眼里,

应始终保持平等或   该函数返回一个等于的int   假

比较是一个三值比较:负/零/正是重要的返回值,而不仅仅是真/假。如果字符串 相等,则返回等于false的int,如果不相等则不返回。

如果您在词汇上排序(子)不同长度的字符串,compare将告诉您它们的顺序。

如果您关心的是(子)字符串相等,那么不同的长度意味着不相等。作为优化,如果compare,您可以跳过调用n1 != n2

答案 1 :(得分:1)

一份文件说: “返回值:如果操作数字符串小于参数字符串,则为负值;如果两个字符串相等,则为零;如果操作数字符串大于参数字符串,则为正值。”

所以它不是真或假。 e.g。

操作数:“abc”,参数:“ab”返回:-1

操作数:“abc”,参数:“ad”返回:+1

答案 2 :(得分:1)

n1n2参数是最大要比较的字符数。如果值超过字符串的长度,std :: compare函数将修剪它们。下面是一个值不相等且函数返回0的示例。

std::string a("AACAB");
std::string b("CAB");
std::cout << a.compare(2, 8, b, 0, 12) << '\n';

我不确定这什么时候有用但是你要求的具体情况。