gpt4 book ai didi

c++ - 与关系运算符的字符串比较(不同长度)

转载 作者:太空狗 更新时间:2023-10-29 21:16:40 24 4
gpt4 key购买 nike

我在 C++ 中比较两个字符串,如下所示:

if(s1 <= s2)
//do stuff

我忘记了字符串比较的复杂性,并在以下情况下很快了解到:

s1 = "10.72";
s2 = "8.87";

该语句将评估为 true 并执行条件内的任何操作。比较发生在 8 和 1 之间。所有数字的 ASCII 表示都是从 48 (0) - 57 (9) 递增的顺序,显然 1 < 8。

我原以为 C++ 考虑了字符串长度,但这是不正确的。有人会介意从 C++ 语言设计的角度解释为什么不考虑长度吗?

最佳答案

实际上,通过调用小于 < 时使用的字典序比较,隐含地考虑了长度。或小于或等于 <=字符串上的运算符。

  • Two ranges are compared element by element.

  • The first mismatching element defines which range is lexicographically less or greater than the other.

  • If one range is a prefix of another, the shorter range is lexicographically less than the other.

  • If two ranges have equivalent elements and are of the same length, then the ranges are lexicographically equal.

来自 http://en.cppreference.com/w/cpp/algorithm/lexicographical_compare

因此,举个例子

"10.72" < "10.721"    // true
"10.72" == "10.72" // true (by string comparison as well as lexicographically equalness)
"10.7211" < "10.7212" // true

为什么,你问?这不是 C++ 的复杂性,而是如何比较字符串的复杂性,其中字典序比较是最常见(在我看来,也是最合乎逻辑的)比较方法之一。

关于c++ - 与关系运算符的字符串比较(不同长度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34540790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com