string::compare 多余的参数?
Posted
技术标签:
【中文标题】string::compare 多余的参数?【英文标题】:string::compare superfluous parameter? 【发布时间】:2010-11-20 15:46:25 【问题描述】:在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
在我看来应该总是相等的或者函数返回一个等于true
的int
(string::compare 返回值 0 (false) 表示相等的字符串)。它是否正确?如果不是,您能否提供一个示例,说明如果比较不等长度 (n1 != n2
),则比较将是 false
?
谢谢!
【问题讨论】:
等等,int
等于 false
吗?
@icecrime:int
可以轻松转换为bool
,这就是您可以将if
与strcmp
等一起使用的方法。
是的,但就像strcmp
一样,compare
不返回布尔值,而是返回一个整数(就像它说的那样)。对于相等的字符串,compare
返回一个整数值 0,在布尔上下文中计算为 false
。
@eq: 好吧,我错了,不过a.compare(b)
可以测试字符串相等性。
@ruvenb: 刚刚从我这周使用的代码中删除了这样的用法,它肯定不如a == b
清晰,因此我真的觉得compare
在你真正关心的时候更好用订购。
【参考方案1】:
在我眼里应该永远相等或 该函数返回一个 int 等于 假的
Compare 是一个三值比较:负/零/正是重要的返回值类型,而不仅仅是真/假。如果字符串 相等 相等,则返回一个等于 false 的 int,如果不相等则不返回。
如果您对不同长度的(子)字符串进行词法排序,compare
会告诉您它们的顺序。
如果您关心的只是(子)字符串相等,那么不同的长度意味着不相等。作为优化,如果n1 != n2
,您可以跳过调用compare
。
【讨论】:
【参考方案2】:n1
和 n2
参数是要比较的最大个字符数。如果值超过字符串的长度,std::compare 函数将修剪这些值。这是一个值不相等且函数返回 0 的示例。
std::string a("AACAB");
std::string b("CAB");
std::cout << a.compare(2, 8, b, 0, 12) << '\n';
我不确定这什么时候有用,但有你要求的具体情况。
【讨论】:
【参考方案3】:一份文件说: "返回值:如果操作数字符串小于参数字符串,则为负值;如果两个字符串相等,则为零;如果操作数字符串大于参数字符串,则为正值。"
所以它只是不是真的或假的。 例如
操作数:“abc”,参数:“ab” 返回:-1
操作数:“abc”,参数:“ad” 返回:+1
【讨论】:
以上是关于string::compare 多余的参数?的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 844. Backspace String Compare