欢迎光临
我们一直在努力

掌握C++ string类的常用函数


在C++中,std::string类(basic_string<char>的特化)是处理字符串的核心工具。相比于传统的C风格字符串,它提供了安全、灵活且功能丰富的接口。本文将系统梳理string类中最常用的成员函数,帮助你写出更简洁、易读且高效的代码。

1. 构造与赋值

构造函数和赋值运算符是创建和修改字符串的基础。

  • 默认构造与空串构造

    std::string s1; // 创建空字符串
    std::string s2("");

  • C风格字符串构造

    std::string s3 = "Hello, World!";

  • 拷贝构造与移动构造

    std::string s4 = s3; // 拷贝构造
    std::string s5 = std::move(s3); // 移动构造

  • 赋值运算符

    s1 = "New Value";
    s1 = s2; // 赋值另一个string
    s1 = 'c'; // 赋值单个字符

  • 赋值函数

    s1.assign("Assign this string");
    s1.assign(5, 'a'); // 生成 "aaaaa"

assign()函数比=运算符更灵活,支持更多参数形式[[1]][[2]]。

2. 容量管理函数

这些函数用于查询或调整字符串的存储空间。

  • 长度查询

    std::size_t len = s1.length(); // 与size()等价
    bool isEmpty = s1.empty(); // 判断是否为空

  • 容量相关

    s1.reserve(100); // 预分配至少100个字符的空间,减少后续扩容次数
    std::size_t cap = s1.capacity(); // 当前分配的容量
    s1.shrink_to_fit(); // 申请回收未使用的内存空间

  • 大小调整

    s1.resize(10, '*'); // 将长度调整为10,不足则填充'*'
    s1.clear(); // 清空字符串,长度变为0

合理使用reserve()和shrink_to_fit()可以显著提升大字符串拼接的性能[[3]][[4]]。

3. 字符访问与修改

直接对单个字符进行操作的函数。

  • 下标与范围检查

    char c1 = s1[0]; // 不检查越界
    char c2 = s1.at(0); // 检查越界,抛出异常

  • 首尾元素

    char first = s1.front();
    char last = s1.back();

  • 推入与弹出

    s1.push_back('!'); // 末尾追加
    s1.pop_back(); // 删除末尾字符

4. 字符串搜索与操作

这是string类最强大的部分,涵盖了查找、插入、删除、替换等功能。

  • 查找函数

    std::size_t pos = s1.find("World"); // 正向查找
    std::size_t rpos = s1.rfind("l"); // 反向查找
    std::size_t firstOf = s1.find_first_of("aeiou"); // 查找第一个元音字符

  • 提取子串

    std::string sub = s1.substr(0, 5); // 提取前5个字符

  • 插入与删除

    s1.insert(5, "INSERT"); // 在索引5处插入子串
    s1.erase(5, 3); // 删除从索引5开始的3个字符

  • 替换与追加

    s1.replace(0, 5, "REPLACE"); // 替换前5个字符
    s1.append(" More text"); // 追加
    s1 += " and even more"; // 使用+=追加

find()系列函数是字符串搜索的核心,返回std::string::npos表示未找到[[5]][[6]]。

5. 迭代器与非成员函数

除了成员函数,string类还支持迭代器和流操作。

  • 迭代器

    for (auto it = s1.begin(); it != s1.end(); ++it) {
    std::cout << *it;
    }
    // 或者使用范围for循环
    for (char c : s1) {
    std::cout << c;
    }

  • 流输入输出

    std::cout << s1 << std::endl; // 输出
    std::cin >> s2; // 输入(遇空格结束)
    std::getline(std::cin, s3); // 输入整行

  • 比较函数

    int cmp = s1.compare(s2);
    // 或者直接使用运算符
    if (s1 == s2) { ... }

std::string支持完整的迭代器接口,允许与STL算法无缝结合[[7]][[8]]。


总结

掌握以上这些函数,你就能应对绝大多数的字符串处理需求。从基本的拼接(+、+=、append)到复杂的搜索(find、rfind)和替换(replace),std::string提供了一个安全、易用且高效的API。希望这篇文章能帮你在C++编程之路上走得更稳、更远!

赞(0)
未经允许不得转载:171主机测评 » 掌握C++ string类的常用函数
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址