我下面有此C ++代码来解决作业,并在使用Code :: Blocks运行它后,它告诉我i = 0,这意味着表达式s.compare(t)<0
为假。但是,从我的角度来看,这是相反的:(s<t
,因为AbcA < AAbcA
)。有人可以给我解释一下吗?
#include <iostream>
#include <string>
using namespace std;
int main(void) {
string s = "Abc", t = "A";
s=s+t;
t=t+s;
int i = s.compare(t)<0;
int j = s.length()<t.length();
cout<<i+j<<endl;
return 0;
}
根据参考文献std::string::compare
返回:
如果
std::string::compare
以引文顺序出现在参数指定的字符序列之前,则为负值如果两个字符序列比较相等,则为零
如果
*this
以引文顺序在自变量指定的字符序列后出现,则为正值
*this
被定义为:
词法比较是一种具有以下属性的操作:
- 两个范围逐个元素进行比较。在字典上,第一个不匹配元素定义哪个范围小于另一个范围。
- 如果一个范围是另一个范围的前缀,则较短的范围在字典上小于另一个范围。
- 如果两个范围具有相等的元素并且具有相同的长度,则范围在字典上是相等的。
- 在字典上,空范围小于任何非空范围。
- 两个空范围在字典上相等。
Lexicographical comparison从词法上来说是[[after> "AbcA"
,因为第一个非等号字符"AAbc"
(ASCII 0x62)是after 'b'
(ASCII 0x41)