std::string字符串类的功能函数

std::string 是 C++ 标准模板库(STL)中用于处理字符串的类,提供了丰富的成员函数和操作符来方便地操作字符串。以下是 std::string 的主要函数分类介绍:


1. 构造函数

  • 默认构造函数:创建空字符串
    std::string s1;
    
  • 从 C 字符串构造
    std::string s2("Hello");
    
  • 从子串构造
    std::string s3("Hello World", 5); // "Hello"
    
  • 从字符填充构造
    std::string s4(5, 'A'); // "AAAAA"
    
  • 拷贝构造
    std::string s5(s2);
    
  • 移动构造(C++11):
    std::string s6(std::move(s5));
    
  • 迭代器范围构造
    std::string s7(s2.begin(), s2.end());
    

2. 容量相关函数

  • size() / length():返回字符串长度(字节数)。
    s1.size(); // 0
    
  • empty():检查字符串是否为空。
    s1.empty(); // true
    
  • capacity():返回当前分配的存储空间大小。
  • reserve(n):请求至少容纳 n 个字符的空间(避免重复分配)。
  • shrink_to_fit()(C++11):请求减少容量以适应实际大小。
  • max_size():返回字符串可能达到的最大长度。

3. 元素访问

  • operator[] / at():访问指定位置的字符(at() 会检查边界)。
    char c = s2[1]; // 'e'
    char c2 = s2.at(1); // 同上,但越界时抛出 `std::out_of_range`
    
  • front() / back():返回首/尾字符的引用。
    char first = s2.front(); // 'H'
    
  • data():返回指向底层字符数组的指针(C++11 起保证以 \0 结尾)。
  • c_str():返回 C 风格字符串(以 \0 结尾)。

4. 修改操作

  • 赋值与交换

    • operator=:赋值字符串、C 字符串或字符。
    • assign():类似 operator=,但更灵活(支持子串、填充等)。
    • swap():交换两个字符串的内容(O(1) 复杂度)。
      s1.assign("World");
      s1.swap(s2);
      
  • 追加与连接

    • operator+=:追加字符串、C 字符串或字符。
    • append():类似 operator+=,但支持更多参数(如子串)。
    • push_back():追加单个字符。
      s1 += " C++";
      s1.append(s2, 0, 3); // 追加 s2 的前 3 个字符
      
  • 插入与删除

    • insert():在指定位置插入字符、字符串或子串。
    • erase():删除指定位置的字符或范围。
    • clear():清空字符串(变为空字符串)。
      s1.insert(5, "11"); // 在位置 5 插入
      s1.erase(5, 2);     // 从位置 5 删除 2 个字符
      
  • 替换

    • replace():替换指定范围的子串。
      s1.replace(0, 5, "Hi"); // 将前 5 个字符替换为 "Hi"
      

5. 字符串操作

  • 子串

    • substr(pos, len):返回从 pos 开始、长度为 len 的子串。
      std::string sub = s2.substr(0, 5); // "Hello"
      
  • 查找与搜索

    • find() / rfind():查找子串或字符,返回位置(未找到返回 npos)。
    • find_first_of() / find_last_of():查找任意给定字符的首次/最后一次出现。
    • find_first_not_of() / find_last_not_of():查找不在给定字符集中的字符。
      size_t pos = s2.find('o'); // 4
      
  • 比较

    • compare():比较字符串(返回 <00>0)。
    • 直接使用 ==!=< 等操作符。
      int result = s1.compare(s2);
      

6. 数值转换(C++11 起)

  • std::stoi() / std::stod():将字符串转换为整数或浮点数(需包含 <string>)。
  • std::to_string():将数值转换为字符串。
    int num = std::stoi("123");
    std::string s = std::to_string(3.14);
    

7. 迭代器支持

  • begin() / end():返回正向迭代器。
  • rbegin() / rend():返回反向迭代器。
  • cbegin() / cend()(C++11):返回常量迭代器。

8. 其他实用函数

  • resize():调整字符串大小(可填充默认字符)。
  • copy():将字符串内容复制到 C 风格数组(需指定目标缓冲区和大小)。

示例代码

#include <iostream>
#include <string>

int main() {
    std::string s = "Hello";
    s.append(" World").push_back('!');
    std::cout << s.substr(0, 5) << std::endl; // "Hello"
    std::cout << s.find('W') << std::endl;    // 6
    s.replace(6, 5, "C++");
    std::cout << s << std::endl; // "Hello C++!"
    return 0;
}

注意事项

  1. 性能:频繁修改字符串(如大量插入/删除)可能导致多次内存分配,建议用 reserve() 预分配空间。
  2. 边界检查at() 会检查边界,而 operator[] 不会(可能未定义行为)。
  3. C++11 改进:新增移动语义、shrink_to_fit()data() 保证 \0 结尾等。

通过灵活组合这些函数,可以高效地处理字符串操作需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

code .

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

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

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

打赏作者

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

抵扣说明:

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

余额充值