在C++ reference on string::compare
中,存在以下重载:
int compare ( size_t pos1, size_t n1, const string& str, size_t pos2, size_t n2 ) const;
有两个参数n1
和n2
在我看来应始终相等或函数返回int
等于true
(string :: compare返回值) 0(假)表示相等的字符串)。它是否正确?如果没有,您是否可以提供一个示例,说明如果比较不等长度(false
),则比较为n1 != n2
的特定情况?
谢谢!
答案 0 :(得分:8)
在我眼里,应始终保持平等或 该函数返回一个等于的int 假
比较是一个三值比较:负/零/正是重要的返回值,而不仅仅是真/假。如果字符串 相等,则返回等于false的int,如果不相等则不返回。
如果您在词汇上排序(子)不同长度的字符串,compare
将告诉您它们的顺序。
如果您关心的是(子)字符串相等,那么不同的长度意味着不相等。作为优化,如果compare
,您可以跳过调用n1 != n2
。
答案 1 :(得分:1)
一份文件说: “返回值:如果操作数字符串小于参数字符串,则为负值;如果两个字符串相等,则为零;如果操作数字符串大于参数字符串,则为正值。”
所以它不是真或假。 e.g。
操作数:“abc”,参数:“ab”返回:-1
操作数:“abc”,参数:“ad”返回:+1
答案 2 :(得分:1)
n1
和n2
参数是最大要比较的字符数。如果值超过字符串的长度,std :: compare函数将修剪它们。下面是一个值不相等且函数返回0的示例。
std::string a("AACAB");
std::string b("CAB");
std::cout << a.compare(2, 8, b, 0, 12) << '\n';
我不确定这什么时候有用但是你要求的具体情况。