std::basic_string::compare
来自cppreference.com
                    
                                        
                    < cpp | string | 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,  | 
(C++14 前) | |
|   int compare( size_type pos1, size_type count1,              const basic_string& str,  | 
(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,  | 
(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)) 。(注意:从 s 到 s+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>> 为 true 且 std::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   (函数模板)  |