C++ 字符串::比较多余的参数?
在中,存在以下过载:C++ 字符串::比较多余的参数?,c++,stl,C++,Stl,在中,存在以下过载: int compare ( size_t pos1, size_t n1, const string& str, size_t pos2, size_t n2 ) const; 它有两个参数n1和n2,在我看来,这两个参数应该始终相等,或者函数返回的int等于true(字符串::比较返回值0(false)表示字符串相等)。这是正确的吗?如果不是,您能否提供一个示例,说明如果比较长度不相等(n1!=n2),比较将为false)的具体情况 谢谢 在我看来,应该永远平等
int compare ( size_t pos1, size_t n1, const string& str, size_t pos2, size_t n2 ) const;
它有两个参数n1
和n2
,在我看来,这两个参数应该始终相等,或者函数返回的int
等于true
(字符串::比较返回值0(false)表示字符串相等)。这是正确的吗?如果不是,您能否提供一个示例,说明如果比较长度不相等(n1!=n2
),比较将为false
)的具体情况
谢谢
在我看来,应该永远平等或平等
函数返回一个等于的整数
假的
比较是三值比较:负/零/正是返回值的重要类型,而不仅仅是真/假。如果字符串相等,则返回等于false的int,如果字符串不相等,则返回不等于false的int
如果您对不同长度的(子)字符串进行词汇排序,compare
将告诉您它们的顺序
如果您关心的只是(子)字符串相等,那么不同的长度意味着不相等。作为优化,如果n1!=n2
一份文件中说:
“返回值:如果操作数字符串小于参数字符串,则返回负值;如果两个字符串相等,则返回零;如果操作数字符串大于参数字符串,则返回正值。”
所以这不是真的也不是假的。
e、 g
操作数:“abc”,参数:“ab”返回:-1
操作数:“abc”,参数:“ad”返回:+1
n1
和n2
参数是要比较的最大字符数。如果值超过字符串的长度,则std::compare函数将修剪这些值。下面是一个值不相等且函数返回0的示例
std::string a("AACAB");
std::string b("CAB");
std::cout << a.compare(2, 8, b, 0, 12) << '\n';
std::字符串a(“AACAB”);
标准::字符串b(“CAB”);
std::cout Wait,一个int
等于false
?@icecrime:anint
可以很容易地转换为bool
,这就是你如何将if
与strcmp
等一起使用的方法。是的,但是像strcmp
,compare
不返回布尔值,而是一个整数(就像上面说的那样)。对于相等的字符串,compare
返回一个整数值0,在布尔上下文中计算为false
。@eq:好的,我的错误,但是字符串相等性可以通过a.compare(b)来测试
尽管如此。@ruvenb:我刚刚从本周使用的一个代码中删去了这种用法,它肯定没有a==b
那么清楚,因此我真的觉得compare
在您真正关心订购时使用得更好。