“>”和“

问题描述 投票:2回答:2

在我正在阅读的C ++教科书中(使用C ++的编程,原理和实践)中,有很多代码片段的实例,其中的字符串比较如下:if (str1 > str2),然后输入一些代码。

有人可以向我解释“大于”和“小于”运算符如何与声明如下的字符串结合使用:

#include <string>
.
.
.
string str1 = "foo";
string str2 = "bar";

我曾尝试在Stack Overflow和其他服务器上搜索此答案,但无济于事。

c++ string
2个回答
4
投票
字符串按字典顺序进行比较。在字典上,一个字符比另一个字符串中的相应字符大的字符串将被视为更大的字符串。这称为

lexicographical comparison

[字典顺序或字典顺序(也称为 如词汇顺序,字典顺序,字母顺序或 词典产品)是单词的概括 根据他们的字母顺序按字母顺序排列 组件字母。

您也可以使用.compare()方法比较两个字符串。它将返回以下值-

0:他们比较相等

小于0:第一个不等于0的字符的值 在比较的字符串或所有比较的字符中匹配项较低 匹配,但比较的字符串较短。

大于0:不包含第一个字符的值 在比较的字符串或所有比较的字符中,match更大 匹配,但比较的字符串更长。

相反,关系运算符(如><==)将仅返回布尔值true或false。在表达式str1 < str2中,如果str1中的第一个不匹配字符小于str2中的相应字符,则str1将小于str2。如果所有字符都匹配,则str1仅在其长度较短时才小于str2


3
投票
字符串上的关系运算符建立了所谓的lexicographical order。与字典中使用的顺序相同。

这里是算法:要确定a是否小于b,您需要找到最小的i,以便a[i] != b[i],如果是(unsigned char)a[i] < (unsigned char)b[i],则需要a < b,否则为a > b

如果没有这样的i,则为a == b

如果ab的前缀,则a < b(这是根据上面的算法得出的,如果您认为字符串末尾的额外\0是字符串的一部分)] >

© www.soinside.com 2019 - 2024. All rights reserved.