详细讲解c++中string容器及其所有接口

string

string简介:string就是字符串加上对字符串的函数组成的。

string容器拥有自动扩容功能,但是不同的编译器扩容的大小不同,大多数编译器采用了二倍扩容。

string的初始化:

一共有四种形式:

string() (重点)(重点) 构造空的string类对象,即空字符串
string(const char* s)用C-string来构造string类对象
string(size_t n, char c)string类对象中包含n个字符c 
string(const string&s)拷贝构造函数

string的迭代器起始位置

  1. begin() 迭代器

    • string.begin() 返回指向第一个元素的迭代器。
    • 例如,如果 v 是一个 std::string,则 v.begin() 返回一个指向第一个元素的迭代器。
  2. cbegin() 迭代器

    • string.cbegin() 返回一个常量迭代器,指向第一个元素。
    • 这意味着通过 cbegin() 返回的迭代器不能用于修改元素的值。
  3. rbegin() 迭代器

    • string.rbegin() 返回一个逆向迭代器,指向最后一个元素。
    • 逆向迭代器允许从容器的末尾向前迭代。
  4. crbegin() 迭代器

    • string.crbegin() 返回一个常量逆向迭代器,指向最后一个元素。
    • 类似于 cbegin(),这意味着它提供的是一个不能修改元素的视图。

string容器的容量及其长度计算:

  1. size() 和 length()

    • size() 和 length() 方法都返回字符串中字符的数量。
    • 示例:
      std::string str = "Hello"; std::cout << "Size: " << str.size() << std::endl; // 输出:5 std::cout << "Length: " << str.length() << std::endl; // 输出:5

  2. max_size()

    • max_size() 方法返回字符串能够包含的最大字符数。
    • 示例:
      std::string str = "Hello"; std::cout << "Max size: " << str.max_size() << std::endl;

  3. capacity()

    • capacity() 方法返回当前分配给字符串的存储空间大小(即内存容量),以字节为单位。
    • 示例:
      std::string str = "Hello"; std::cout << "Capacity: " << str.capacity() << std::endl;

  4. resize()

    • resize() 方法可以改变字符串的长度,可能会导致内存重新分配。
    • 示例:
      std::string str = "Hello"; str.resize(8); // 将字符串长度改变为 8

  5. reserve()

    • reserve() 方法请求字符串预留一定的存储空间,可以减少频繁的内存分配操作。
    • 示例:
      std::string str = "Hello"; str.reserve(20); // 预留至少能容纳 20 个字符的空间

  6. shrink_to_fit()

    • shrink_to_fit() 方法尝试减少字符串的容量,使其与当前存储的字符数相匹配。
    • 示例:
      std::string str = "Hello"; str.resize(3); // 缩短字符串长度到 3 str.shrink_to_fit(); // 尝试释放多余的内存空间

  7. clear()empty()

    • clear() 方法清空字符串内容,使其成为空字符串。
    • empty() 方法检查字符串是否为空,返回 true 或 false
    • 示例:
      std::string str = "Hello"; str.clear(); // 清空字符串内容 bool isEmpty = str.empty(); // 检查字符串是否为空

对string容器进行修改

  1. operator+=

    • operator+= 是重载的运算符,用于将字符串或字符追加到现有字符串的末尾。
    • 示例:
      std::string str = "Hello"; str += " World"; // 追加字符串

  2. append()

    • append() 方法用于将指定字符串的一部分或整个字符串追加到当前字符串的末尾。
    • 示例:
      std::string str = "Hello"; str.append(" World"); // 追加字符串

  3. push_back()

    • push_back() 方法用于将字符追加到字符串的末尾。
    • 示例:
      std::string str = "Hello"; str.push_back('!'); // 追加字符

  4. assign()

    • assign() 方法用于替换字符串的内容,可以指定要复制的字符串、子字符串或者重复的字符。
    • 示例:
      std::string str = "Hello"; str.assign("Goodbye"); // 替换整个字符串内容

  5. insert()

    • insert() 方法用于在指定位置插入字符串、子字符串或字符。
    • 示例:
      std::string str = "Hello"; str.insert(5, " World"); // 在位置5插入字符串

  6. erase()

    • erase(size_type pos = 0, size_type count = npos)

      • 从指定位置 pos 开始移除 count 个字符。
      • 如果 count 超过了可用字符数,则移除从 pos 开始到字符串末尾的所有字符。
      • 如果 pos 超出了字符串的大小,会抛出 std::out_of_range 异常。
      std::string str = "Hello, world!"; str.erase(7, 6); // 从位置7开始,移除6个字符,结果为 "Hello!"

    • iterator erase(const_iterator position)

      • 移除由迭代器 position 指定的单个字符。
      • 返回一个指向被移除字符后面的字符的迭代器。

      std::string str = "Hello, world!"; auto it = str.begin() + 5; str.erase(it); // 移除 'w',结果为 "Hello world!"
    • iterator erase(const_iterator first, const_iterator last)

      • 移除从迭代器 first 指向的位置开始,到迭代器 last 指向的位置之前(不包括 last 指向的位置)的所有字符。
      • 返回一个指向被移除字符后面的字符的迭代器。
      std::string str = "Hello, world!"; auto it1 = str.begin() + 7; auto it2 = str.begin() + 12; str.erase(it1, it2); // 移除 ", world",结果为 "Hello!"

  7. replace()

    • replace() 方法用于替换字符串的一部分内容,从指定位置开始,用指定长度的字符串或字符替换。
    • 示例:
       

      cppCopy Code

      std::string str = "Hello"; str.replace(2, 3, "abc"); // 从位置2开始,替换3个字符为 "abc"
  8. swap()

    • swap() 方法用于交换两个字符串的内容。
    • 示例:
       

      cppCopy Code

      std::string str1 = "Hello"; std::string str2 = "World"; str1.swap(str2); // 交换两个字符串的内容
  9. pop_back()

    • pop_back() 方法用于移除字符串末尾的字符。
    • 示例:
       

      cppCopy Code

      std::string str = "Hello"; str.pop_back(); // 移除末尾的字符 'o'

string的成员函数

  1. c_str()

    • 返回一个指向以 null 结尾的 C 字符串 (const char*) 的指针,该字符串是当前 std::string 对象中字符序列的副本。
    • 这允许 std::string 对象与使用 C 风格字符串的函数进行互操作。
  2. data()

    • 返回一个指向字符串中第一个字符的指针 (char*)。
    • 与 c_str() 不同,data() 不会添加 null 终止符,因此返回的指针可以用于修改字符串的内容。
  3. get_allocator()

    • 返回用于分配 std::string 内部存储的分配器对象。
  4. copy()

    • 将字符串中的一段字符复制到另一个字符数组中。
    • 接受目标字符数组的指针和要复制的字符数作为参数,并返回实际复制的字符数。
  5. find()

    • 在字符串中查找指定的子串或字符。
    • 返回找到的第一个匹配子串或字符的位置,如果找不到则返回 std::string::npos
  6. rfind()

    • 在字符串中从末尾开始查找指定的子串或字符。
    • 返回找到的最后一个匹配子串或字符的位置,如果找不到则返回 std::string::npos
  7. find_first_of()

    • 在字符串中查找第一个匹配给定字符集合中任何一个字符的位置。
    • 返回找到的第一个匹配字符的位置,如果找不到则返回 std::string::npos
  8. find_last_of()

    • 在字符串中从末尾开始查找第一个匹配给定字符集合中任何一个字符的位置。
    • 返回找到的最后一个匹配字符的位置,如果找不到则返回 std::string::npos
  9. find_first_not_of()

    • 在字符串中查找第一个不在指定字符集合中的字符的位置。
    • 返回找到的第一个不匹配字符的位置,如果找不到则返回 std::string::npos
  10. find_last_not_of()

    • 在字符串中从末尾开始查找第一个不在指定字符集合中的字符的位置。
    • 返回找到的最后一个不匹配字符的位置,如果找不到则返回 std::string::npos
  11. substr()

    • 返回一个新的字符串,其中包含从指定位置开始的指定长度的字符序列。
    • 参数是起始位置和要复制的字符数,如果未指定字符数,则复制从起始位置到字符串末尾的所有字符。
  12. compare()

    • 比较当前字符串与另一个字符串或字符数组。
    • 返回一个整数,指示两个字符串的相对大小(小于、等于或大于)。
  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

矢鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值