【问题标题】:string::compare superfluous parameter?string::compare 多余的参数?
【发布时间】: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 在你真正关心的时候更好用订购。

标签: c++ stl


【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-02
        • 1970-01-01
        • 1970-01-01
        • 2013-02-26
        相关资源
        最近更新 更多