s.compare成员函数在以下C ++代码中的行为如何?

问题描述 投票:0回答:1

我下面有此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;
}
c++ string
1个回答
2
投票

根据参考文献std::string::compare返回:

如果std::string::compare以引文顺序出现在参数指定的字符序列之前,则为负值

如果两个字符序列比较相等,则为零

如果*this以引文顺序在自变量指定的字符序列后出现,则为正值

*this被定义为:

词法比较是一种具有以下属性的操作:

  • 两个范围逐个元素进行比较。在字典上,第一个不匹配元素定义哪个范围小于另一个范围。
  • 如果一个范围是另一个范围的前缀,则较短的范围在字典上小于另一个范围。
  • 如果两个范围具有相等的元素并且具有相同的长度,则范围在字典上是相等的。
  • 在字典上,空范围小于任何非空范围。
  • 两个空范围在字典上相等。

Lexicographical comparison从词法上来说是[[after> "AbcA",因为第一个非等号字符"AAbc"(ASCII 0x62)是after 'b'(ASCII 0x41)

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