【数据结构】字符串操作整理(C++)

1. 字符串长度与容量

size() / length()
  • 定义:返回字符串的当前长度(字符数)。

  • 用法

    cpp 复制代码
    string s = "hello";
    cout << s.size();  // 输出:5
  • 提示size()length() 功能完全相同,可互换使用。

capacity()
  • 定义:返回当前分配给字符串的内存容量(字符数)。

  • 用法

    cpp 复制代码
    string s = "hello";
    cout << s.capacity();  // 可能输出:15(取决于编译器实现)
  • 提示:容量通常大于实际长度,以避免频繁重新分配内存。

2. 字符串修改

push_back(char c)
  • 定义:在字符串末尾添加一个字符。

  • 用法

    cpp 复制代码
    string s = "abc";
    s.push_back('d');  // s 变为 "abcd"
  • 提示 :等效于 s += c,但 push_back() 更明确表示添加单个字符。

append(const string& str)
  • 定义:在字符串末尾追加另一个字符串。

  • 用法

    复制代码
    string s = "hello";
    s.append(" world");  // s 变为 "hello world"
  • 提示 :支持追加子串(如 append(str, pos, len))或字符数组。

erase(pos, len)
  • 定义 :从位置 pos 开始删除 len 个字符(若省略 len,则删除到末尾)。

  • 用法

    cpp 复制代码
    string s = "hello";
    s.erase(1, 2);  // s 变为 "hlo"
  • 提示:删除后,后续字符会前移填补空缺,可能影响迭代器。

3. 字符串查找

find(const string& str, pos)
  • 定义 :从位置 pos 开始查找子串 str,返回首次出现的位置;若未找到,返回 string::npos

  • 用法

    cpp 复制代码
    string s = "hello";
    size_t pos = s.find("ll");  // pos = 2
  • 提示 :查找失败时需检查 pos == string::npos

rfind(const string& str)
  • 定义:从后往前查找子串,返回最后一次出现的位置。

  • 用法

    cpp 复制代码
    string s = "abab";
    size_t pos = s.rfind("ab");  // pos = 2

4. 字符串子串

substr(pos, len)
  • 定义 :返回从位置 pos 开始的 len 个字符的子串(若省略 len,则截取到末尾)。

  • 用法

    cpp 复制代码
    string s = "hello";
    string sub = s.substr(1, 3);  // sub 为 "ell"
  • 提示substr(pos) 可用于截取后缀子串。

5. 字符串替换

replace(pos, len, const string& str)
  • 定义 :将从位置 pos 开始的 len 个字符替换为 str

  • 用法

    cpp 复制代码
    string s = "hello";
    s.replace(1, 3, "XYZ");  // s 变为 "hXYZo"
  • 提示:替换前后的字符串长度可能不同,需注意后续字符位置变化。

6. 字符串比较

compare(const string& str)
  • 定义 :比较两个字符串的字典序。返回值:

    • 0:相等
    • 负值:当前字符串小于 str
    • 正值:当前字符串大于 str
  • 用法

    cpp 复制代码
    string s1 = "abc";
    string s2 = "abd";
    cout << s1.compare(s2);  // 输出负值(如 -1)
  • 提示 :更常用 ==<> 等运算符进行比较。

7. 字符串与数值转换

stoi(const string& str)
  • 定义 :将字符串转换为整数(类似的有 stolstod 等)。

  • 用法

    cpp 复制代码
    string s = "123";
    int num = stoi(s);  // num = 123
  • 提示 :若字符串格式非法,会抛出 invalid_argumentout_of_range 异常。

to_string(int value)
  • 定义:将数值转换为字符串(支持各种数值类型)。

  • 用法

    cpp 复制代码
    int num = 123;
    string s = to_string(num);  // s = "123"

注意事项

  1. 迭代器失效 :在修改字符串(如 eraseinsert)后,原有的迭代器、引用和指针可能失效。
  2. 性能考虑:频繁的插入或删除操作可能导致内存重新分配,效率较低。
  3. 空字符串检查 :使用 empty() 而非 size() == 0 检查字符串是否为空。
  4. 边界检查 :访问或操作字符串时,确保索引不越界(可用 at(pos) 替代 [],越界时抛出异常)。

示例

cpp 复制代码
#include <iostream>
#include <string>

int main() {
    std::string s = "hello";
    
    // 修改
    s.push_back('!');  // "hello!"
    s.append(" world");  // "hello! world"
    
    // 查找
    size_t pos = s.find("world");  // 7
    
    // 替换
    if (pos != std::string::npos) {
        s.replace(pos, 5, "universe");  // "hello! universe"
    }
    
    // 子串
    std::string sub = s.substr(6, 3);  // "! u"
    
    // 转换
    int num = 42;
    std::string numStr = std::to_string(num);  // "42"
    
    std::cout << s << "\n";  // 输出:hello! universe
    return 0;
}
相关推荐
云栖梦泽1 分钟前
Linux内核与驱动:7.从应用层 lseek() 到驱动层 .llseek,Linux 字符设备偏移控制详解
linux·c++
skilllite作者2 分钟前
SkillLite 多入口架构实战:CLI / Python SDK / MCP / Desktop / Swarm 一页理清
开发语言·人工智能·python·安全·架构·rust·agentskills
秋月的私语7 分钟前
遥感影像拼接线优化工具:基于Qt+GDAL+OpenCV的从零到一实践
开发语言·qt·opencv
steins_甲乙9 分钟前
从0做一个小型内存泄露检测器(2): elf文件的动态链接
c++
xwz小王子16 分钟前
智元发布 GO-2:动作空间推理 + 全生命周期闭环,让机器人稳定可靠落地
开发语言·golang·机器人
charlie11451419116 分钟前
通用GUI编程技术——图形渲染实战(二十八)——图像格式与编解码:PNG/JPEG全掌握
开发语言·c++·windows·学习·图形渲染·win32
汀、人工智能18 分钟前
[特殊字符] 第72课:杨辉三角
数据结构·算法·数据库架构·图论·bfs·杨辉三角
ZC跨境爬虫19 分钟前
海南大学交友平台登录页开发实战day4(解决python传输并读取登录信息的问题)
开发语言·前端·python·flask·html
wjs202421 分钟前
SQL LEN() 函数详解
开发语言
姓刘的哦27 分钟前
Qt自定义控件
开发语言·qt