std::basic_string1) 比较此 string 与 str 。::compare
int compare( const basic_string& str ) const; (C++11 前) int compare( const basic_string& str ) const noexcept; (C++11 起)调用示例
// 1) 比较此 string 与 str
std::cout << "str1: " << str1 << ", ";
std::cout << "str2: " << str2 << " ";
std::cout << "str1.compare(str2): " << str1.compare(str2) << std::endl;
std::cout << "str1: " << str1 << ", ";
std::cout << "str3: " << str3 << " ";
std::cout << "str1.compare(str3): " << str1.compare(str3) << std::endl;
std::cout << "str1: " << str1 << ", ";
std::cout << "str5: " << str5 << " ";
std::cout << "str1.compare(str5): " << str1.compare(str5) << std::endl << std::endl;
2) 比较此 string 的 [pos1, pos1+count1) 子串与 str 。
若 count1 > size() - pos1 则子串为 [pos1, size()) 。
int compare( size_type pos1, size_type count1,
const basic_string& str ) const;
调用示例
// 2) 比较此 string 的 [pos1, pos1+count1) 子串与 str 。
std::cout << "str1: " << str1 << ", ";
std::cout << "str4: " << str4 << " " << std::endl;
std::cout << "str1.compare(0, 3, str4): "
<< str1.compare(0, 3, str4) << std::endl;
std::cout << "str1.compare(0, 4, str4): "
<< str1.compare(0, 4, str4) << std::endl;
std::cout << "str1.compare(0, 4, str3): "
<< str1.compare(0, 4, str3) << std::endl << std::endl;
3) 比较此 string 的 [pos1, pos1+count1) 子串与 str 的子串 [pos2, pos2+count2) 。
若 count1 > size() - pos1 则第一子串为 [pos1, size()) 。类似地若 count2 > str.size() - pos2 则第二子串为 [pos2, str.size()) 。
int compare( size_type pos1, size_type count1,
const basic_string& str,
size_type pos2, size_type count2 ) const; (C++14 前)
调用示例
// 3) 比较此 string 的 [pos1, pos1+count1) 子串与 str 的子串 [pos2, pos2+count2) 。
std::cout << "str1: " << str1 << ", ";
std::cout << "str4: " << str4 << " " << std::endl;
std::cout << "str1.compare(0, 3, str4, 0, 3): "
<< str1.compare(0, 3, str4, 0, 3) << std::endl;
std::cout << "str1.compare(0, 3, str4, 0, 2): "
<< str1.compare(0, 3, str4, 0, 2) << std::endl;
std::cout << "str1.compare(0, 4, str3, 0, 4): "
<< str1.compare(0, 4, str3, 0, 4) << std::endl << std::endl;
4) 比较此 string 与始于 s 所指向字符的长度为 Traits::length(s) 的空终止字符序列。
int compare( const CharT* s ) const;调用示例
// 4) 比较此 string 与始于 s 所指向字符的长度为 Traits::length(s) 的空终止字符序列。
std::cout << "str1: " << str1 << ", ";
std::cout << "str2: " << str2 << " ";
std::cout << "str1.compare(str2.c_str()): " << str1.compare(str2.c_str()) << std::endl;
std::cout << "str1: " << str1 << ", ";
std::cout << "str5: " << str5 << " ";
std::cout << "str1.compare(str5.c_str()): " << str1.compare(str5.c_str()) << std::endl;
std::cout << "str1: " << str1 << ", ";
std::cout << "str3: " << str3 << " ";
std::cout << "str1.compare(str3.c_str()): " << str1.compare(str3.c_str()) << std::endl << std::endl;
5) 比较此 string 的 [pos1, pos1+count1) 子串与始于 s 所指向字符的长度为 Traits::length(s) 的空终止字符序列。
若 count1 > size() - pos1 则子串为 [pos1, size()) 。
int compare( size_type pos1, size_type count1,
const CharT* s ) const;
调用示例
// 5) 比较此 string 的 [pos1, pos1+count1)
// 子串与始于 s 所指向字符的长度为 Traits::length(s) 的空终止字符序列。
std::cout << "str1: " << str1 << ", ";
std::cout << "str4: " << str4 << " " << std::endl;
std::cout << "str1.compare(0, 3, str4.c_str()): "
<< str1.compare(0, 3, str4.c_str()) << std::endl;
std::cout << "str1.compare(0, 4, str4.c_str()): "
<< str1.compare(0, 4, str4.c_str()) << std::endl;
std::cout << "str1.compare(0, 4, str3.c_str()): "
<< str1.compare(0, 4, str3.c_str()) << std::endl << std::endl;
6) 比较此 string 的 [pos1, pos1+count1) 子串与范围 [s, s + count2) 中的字符。
(注意:范围 [s, s + count2) 中的字符可包含空字符。)
int compare( size_type pos1, size_type count1,
const CharT* s, size_type count2 ) const;
调用示例
// 6) 比较此 string 的 [pos1, pos1+count1) 子串与范围 [s, s + count2) 中的字符。
std::cout << "str1: " << str1 << ", ";
std::cout << "str4: " << str4 << " " << std::endl;
std::cout << "str1.compare(0, 3, str4.c_str(), 0, 3): "
<< str1.compare(0, 3, str4.c_str(), 0, 3) << std::endl;
std::cout << "str1.compare(0, 3, str4.c_str(), 0, 2): "
<< str1.compare(0, 3, str4.c_str(), 0, 2) << std::endl;
std::cout << "str1.compare(0, 4, str3.c_str(), 0, 4): "
<< str1.compare(0, 4, str3.c_str(), 0, 4) << std::endl << std::endl;
按下列方式比较始于 data1 的 count1 个字符组成的字符序列与始于 data2 的 count2 个字符组成的字符序列。首先,如同用 size_type rlen = std::min(count1, count2) 计算要比较的字符数。然后调用 Traits::compare(data1, data2, rlen) 比较序列。对于标准字符特性,此函数进行逐字符字典序比较。若结果为零(到此为止的字符序列相等),则按下列方式比较其大小:
| 条件 | 结果 | 返回值 | |
|---|---|---|---|
| Traits::compare(data1, data2, rlen) < 0 | data1 小于 data2 | <0 | |
| Traits::compare(data1, data2, rlen) == 0 | size1 < size2 | data1 小于 data2 | <0 |
| size1 == size2 | data1 等于 data2 | 0 | |
| size1 > size2 | data1 大于 data2 | >0 | |
| Traits::compare(data1, data2, rlen) > 0 | data1 大于 data2 | >0 | |
| str | - | 要比较的另一 string |
| s | - | 指向要比较的字符串的指针 |
| count1 | - | 此 string 要比较的字符数 |
| pos1 | - | 此 string 中要比较的首字符的位置 |
| count2 | - | 给定字符串要比较的字符数 |
| pos2 | - | 给定字符串的要比较的首字符位置 |
| t | - | 要比较的对象(可转换为 std::basic_string_view ) |
若 *this 在字典序中先出现于参数所指定的字符序列,则为正值。
若两个序列比较等价则为零。
若 *this 在字典序中后出现于参数所指定的字符序列,则为负值。
异常接收名为 pos1 或 pos2 的参数的重载若参数在范围外则抛出 std::out_of_range 。
可能的实现 template |
对于不要求三路比较的情形, std::basic_string 提供通常关系运算符( < 、 <= 、 == 、 > 等)。
此函数默认(以默认 std::char_traits )不会考虑本地环境。具本地环境的三路比较见 std::collate::compare
调用示例 // 比较二个字符串
string str1 = "abcef";
string str2 = "abcef";
string str3 = "abhjk";
string str4 = "abc";
string str5 = "abcee";
// 1) 比较此 string 与 str
std::cout << "str1: " << str1 << ", ";
std::cout << "str2: " << str2 << " ";
std::cout << "str1.compare(str2): " << str1.compare(str2) << std::endl;
std::cout << "str1: " << str1 << ", ";
std::cout << "str3: " << str3 << " ";
std::cout << "str1.compare(str3): " << str1.compare(str3) << std::endl;
std::cout << "str1: " << str1 << ", ";
std::cout << "str5: " << str5 << " ";
std::cout << "str1.compare(str5): " << str1.compare(str5) << std::endl << std::endl;
// 2) 比较此 string 的 [pos1, pos1+count1) 子串与 str 。
std::cout << "str1: " << str1 << ", ";
std::cout << "str4: " << str4 << " " << std::endl;
std::cout << "str1.compare(0, 3, str4): "
<< str1.compare(0, 3, str4) << std::endl;
std::cout << "str1.compare(0, 4, str4): "
<< str1.compare(0, 4, str4) << std::endl;
std::cout << "str1.compare(0, 4, str3): "
<< str1.compare(0, 4, str3) << std::endl << std::endl;
// 3) 比较此 string 的 [pos1, pos1+count1) 子串与 str 的子串 [pos2, pos2+count2) 。
std::cout << "str1: " << str1 << ", ";
std::cout << "str4: " << str4 << " " << std::endl;
std::cout << "str1.compare(0, 3, str4, 0, 3): "
<< str1.compare(0, 3, str4, 0, 3) << std::endl;
std::cout << "str1.compare(0, 3, str4, 0, 2): "
<< str1.compare(0, 3, str4, 0, 2) << std::endl;
std::cout << "str1.compare(0, 4, str3, 0, 4): "
<< str1.compare(0, 4, str3, 0, 4) << std::endl << std::endl;
// 4) 比较此 string 与始于 s 所指向字符的长度为 Traits::length(s) 的空终止字符序列。
std::cout << "str1: " << str1 << ", ";
std::cout << "str2: " << str2 << " ";
std::cout << "str1.compare(str2.c_str()): " << str1.compare(str2.c_str()) << std::endl;
std::cout << "str1: " << str1 << ", ";
std::cout << "str5: " << str5 << " ";
std::cout << "str1.compare(str5.c_str()): " << str1.compare(str5.c_str()) << std::endl;
std::cout << "str1: " << str1 << ", ";
std::cout << "str3: " << str3 << " ";
std::cout << "str1.compare(str3.c_str()): " << str1.compare(str3.c_str()) << std::endl << std::endl;
// 5) 比较此 string 的 [pos1, pos1+count1)
// 子串与始于 s 所指向字符的长度为 Traits::length(s) 的空终止字符序列。
std::cout << "str1: " << str1 << ", ";
std::cout << "str4: " << str4 << " " << std::endl;
std::cout << "str1.compare(0, 3, str4.c_str()): "
<< str1.compare(0, 3, str4.c_str()) << std::endl;
std::cout << "str1.compare(0, 4, str4.c_str()): "
<< str1.compare(0, 4, str4.c_str()) << std::endl;
std::cout << "str1.compare(0, 4, str3.c_str()): "
<< str1.compare(0, 4, str3.c_str()) << std::endl << std::endl;
// 6) 比较此 string 的 [pos1, pos1+count1) 子串与范围 [s, s + count2) 中的字符。
std::cout << "str1: " << str1 << ", ";
std::cout << "str4: " << str4 << " " << std::endl;
std::cout << "str1.compare(0, 3, str4.c_str(), 0, 3): "
<< str1.compare(0, 3, str4.c_str(), 0, 3) << std::endl;
std::cout << "str1.compare(0, 3, str4.c_str(), 0, 2): "
<< str1.compare(0, 3, str4.c_str(), 0, 2) << std::endl;
std::cout << "str1.compare(0, 4, str3.c_str(), 0, 4): "
<< str1.compare(0, 4, str3.c_str(), 0, 4) << std::endl << std::endl;
暑期编程PK赛 得CSDN机械键盘等精美礼品!



