栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++11 标准模板(STL)string(十一)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++11 标准模板(STL)string(十一)

string 操作 比较二个字符串   compare
std::basic_string::compare
1) 比较此 string 与 str 。
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) < 0data1 小于 data2<0
Traits::compare(data1, data2, rlen) == 0size1 < size2data1 小于 data2<0
size1 == size2data1 等于 data2​0​
size1 > size2data1 大于 data2>0
Traits::compare(data1, data2, rlen) > 0data1 大于 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
int basic_string::compare(const std::basic_string& s) const noexcept
{
    size_type lhs_sz = size();
    size_type rhs_sz = s.size();
    if (int result = traits_type::compare(data(), s.data(), std::min(lhs_sz, rhs_sz)))
        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

调用示例
    // 比较二个字符串
    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机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1015865.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号