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;

它有两个参数n1n2 在我看来应该总是相等的或者函数返回一个等于trueint (string::compare 返回值 0 (false) 表示相等的字符串)。它是否正确?如果不是,您能否提供一个示例,说明如果比较不等长度 (n1 != n2),则比较将是 false

谢谢!

【问题讨论】:

等等,int 等于 false 吗? @icecrime:int 可以轻松转换为bool,这就是您可以将ifstrcmp 等一起使用的方法。 是的,但就像strcmp 一样,compare 不返回布尔值,而是返回一个整数(就像它说的那样)。对于相等的字符串,compare 返回一个整数值 0,在布尔上下文中计算为 false @eq: 好吧,我错了,不过a.compare(b) 可以测试字符串相等性。 @ruvenb: 刚刚从我这周使用的代码中删除了这样的用法,它肯定不如a == b 清晰,因此我真的觉得compare 在你真正关心的时候更好用订购。 【参考方案1】:

在我眼里应该永远相等或 该函数返回一个 int 等于 假的

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

如果您对不同长度的(子)字符串进行词法排序,compare 会告诉您它们的顺序。

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

【讨论】:

【参考方案2】:

n1n2 参数是要比较的最大个字符数。如果值超过字符串的长度,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 多余的参数?的主要内容,如果未能解决你的问题,请参考以下文章

844. Backspace String Compare

LeetCode 844. Backspace String Compare

STL || HDU 1894 String Compare

VB 的字符串处理函数

QTP基本方法2------截取字符串

C++ string.compare()