代码之家  ›  专栏  ›  技术社区  ›  rubenvb

字符串::比较多余的参数?

  •  4
  • rubenvb  · 技术社区  · 14 年前

    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::比较返回值0(false)表示相等的字符串)。这是正确的吗?如果没有,你能提供一个例子来说明一个具体的案例吗 false 如果长度不相等( n1 != n2 )比较?

    谢谢!

    3 回复  |  直到 14 年前
        1
  •  1
  •   Blastfurnace    14 年前

    这个 n1 n2 参数是 最大限度 要比较的字符数。STD::比较函数将在字符串超过字符串长度时修整值。下面是一个例子,其中值不相等,函数返回0。

    std::string a("AACAB");
    std::string b("CAB");
    std::cout << a.compare(2, 8, b, 0, 12) << '\n';
    

    我不确定这什么时候有用,但有你要求的具体情况。

        2
  •  8
  •   Steve Jessop    14 年前

    在我的眼中应该永远是平等的或者 函数返回的int等于 假

    比较是三值比较:负/零/正是返回值的重要类型,而不仅仅是真/假。如果字符串 相等,如果不相等就不行。

    如果你在词法上对不同长度的(子)字符串排序, compare 会告诉你他们是什么顺序来的。

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

        3
  •  1
  •   riderchap    14 年前

    一份文件说: “返回值:如果操作数字符串小于参数字符串,则为负值;如果两个字符串相等,则为零;如果操作数字符串大于参数字符串,则为正值。”

    所以这不是真是假。 例如

    操作数:“abc”,参数:“ab”返回-1

    操作数:“abc”,参数:“ad”返回:+1