std::basic_string::compare

来自cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
int compare( const basic_string& str ) const;
(1)
int compare( size_type pos1, size_type count1,
             const basic_string& str ) const;
(2)
(3)
int compare( size_type pos1, size_type count1,

             const basic_string& str,

             size_type pos2, size_type count2 ) const;
(C++14 前)
int compare( size_type pos1, size_type count1,

             const basic_string& str,

             size_type pos2, size_type count2 = npos ) const;
(C++14 起)
int compare( const CharT* s ) const;
(4)
int compare( size_type pos1, size_type count1,
             const CharT* s ) const;
(5)
int compare( size_type pos1, size_type count1,
             const CharT* s, size_type count2 ) const;
(6)
int compare( std::basic_string_view<CharT, Traits> sv) const;
(7) (C++17 起)
int compare( size_type pos1, size_type count1,
             std::basic_string_view<CharT, Traits> sv) const;
(8) (C++17 起)
template < class T >

int compare( size_type pos1, size_type count1,
             const T& t,

             size_type pos2, size_type count2 = npos) const;
(9) (C++17 起)

比较二个字符序列。

1) 比较此 string 与 str 。首先,计算要比较的字符数,如同用 size_type rlen = std::min(size(), str.size()) 。然后通过调用 Traits::compare(data(), str.data(), rlen) 比较。对于标准 string ,则函数进行逐字符字典序比较。若结果为零(至此字符串相等),则按下列方式比较其大小:
条件 结果 返回值
Traits::compare(data, arg, rlen) < 0 data 小于 arg <0
Traits::compare(data, arg, rlen) == 0 size(data) < size(arg) data 小于 arg <0
size(data) == size(arg) data 等于 arg 0
size(data) > size(arg) data 大于 arg >0
Traits::compare(data, arg, rlen) > 0 data 大于 arg >0
2) 比较此 string 的 [pos1, pos1+count1) 子串与 str ,如同用 basic_string(*this, pos1, count1).compare(str) (C++17 前)compare(pos1, count1, std::basic_string_view<CharT, Traits>(str)) (C++17 起)
3) 比较此 string 的 [pos1, pos1+count1) 子串与 str 的子串 [pos2, pos2+count2) ,如同用 basic_string(*this, pos1, count1).compare(basic_string(str, pos2, count2)) (C++17 前)compare(pos1, count1, std::basic_string_view<CharT, Traits>(str), pos2, count2) (C++17 起)
4) 比较此 string 与始于 s 所指向字符的空终止字符序列,如同用 compare(basic_string(s))
5) 比较此 string 的 [pos1, pos1+count1) 子串与始于 s 所指向字符的空终止字符序列,如同用 basic_string(*this, pos, count1).compare(basic_string(s))
6) 比较此 string 的 [pos1, pos1+count1) 子串与首字符为 s 所指向的字符数组的 count2 个字符,如同用 basic_string(*this, pos, count1).compare(basic_string(s, count2)) 。(注意:从 ss+count2 的字符可以包含空字符)
7) 比较此 string 与 sv ,同 (1) ,除了用 sv.size()sv.data() 替代 str.size()str.data()
8) 比较此 string 的 [pos1, pos1+count1) 子串与 sv ,如同用 std::basic_string_view<CharT, Traits>(data(), size()).substr(pos1, count1).compare(sv)
9) 如同以 std::basic_string_view<CharT, Traits> sv = t; ,转换 t 为字符串视图 sv ,然后比较此 string 的 [pos1, pos1+count1) 子串与 sv[pos2, pos2+count2) 子串,如同用 std::basic_string_view<CharT, Traits>(data(), size()).substr(pos1, count1).compare(sv.substr(pos2, count2)); 。此重载仅若 std::is_convertible_v<const T&, std::basic_string_view<CharT, Traits>>truestd::is_convertible_v<const T&, const CharT*>false 才参与重载决议。

目录

[编辑] 参数

str - 要比较的另一 string
s - 指向要比较的字符串的指针
count1 - 此 string 要比较的字符数
pos1 - 此 string 中要比较的首字符的位置
count2 - 给定字符串要比较的字符数
pos2 - 给定字符串的要比较的首字符位置
sv - 要比较的 std::basic_string_view
t - 要比较的对象(可转换为 std::basic_string_view

[编辑] 返回值

*this 在字典序中先出现于参数所指定的字符序列,则为正值。

若两个序列比较等价则为零。

*this 在字典序中后出现于参数所指定的字符序列,则为负值。

[编辑] 异常

1)
(无) (C++11 前)
noexcept 规定:  
noexcept
  
(C++11 起)
2-6) 可能抛出对应的 basic_string 构造函数所抛的异常。
7)
noexcept 规定:  
noexcept
  
(C++17 起)

[编辑] 可能的实现

template<class CharT, class Traits, class Alloc>
int basic_string<CharT, Traits, Alloc>::compare(const std::basic_string& s) const noexcept
{
    size_type lhs_sz = size();
    size_type rhs_sz = s.size();
    int result = traits_type::compare(data(), s.data(), std::min(lhs_sz, rhs_sz));
    if (result != 0)
        return result;
    if (lhs_sz < rhs_sz)
        return -1;
    if (lhs_sz > rhs_sz)
        return 1;
    return 0;
}

[编辑] 注意

对于不要求三路比较的情形, std::basic_string 提供通常关系运算符<<===> 等)。

此函数默认(以默认 std::char_traits )不会考虑本地环境。具本地环境的三路比较见 std::collate::compare

[编辑] 示例

[编辑] 参阅

以字典序比较二个字符串
(函数模板) [编辑]
返回子串
(公开成员函数) [编辑]
定义字典序比较和字符串的哈希
(类模板) [编辑]
按照当前本地环境比较二个字符串
(函数) [编辑]
如果按字典顺序一个区间小于另一个区间,返回true
(函数模板) [编辑]