当前位置: 首页 > news >正文

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

1. 字符串长度与容量

size() / length()
  • 定义:返回字符串的当前长度(字符数)。
  • 用法
    string s = "hello";
    cout << s.size();  // 输出:5
    
  • 提示size() 和 length() 功能完全相同,可互换使用。
capacity()
  • 定义:返回当前分配给字符串的内存容量(字符数)。
  • 用法
    string s = "hello";
    cout << s.capacity();  // 可能输出:15(取决于编译器实现)
    
  • 提示:容量通常大于实际长度,以避免频繁重新分配内存。

2. 字符串修改

push_back(char c)
  • 定义:在字符串末尾添加一个字符。
  • 用法
    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,则删除到末尾)。
  • 用法
    string s = "hello";
    s.erase(1, 2);  // s 变为 "hlo"
    
  • 提示:删除后,后续字符会前移填补空缺,可能影响迭代器。

3. 字符串查找

find(const string& str, pos)
  • 定义:从位置 pos 开始查找子串 str,返回首次出现的位置;若未找到,返回 string::npos
  • 用法
    string s = "hello";
    size_t pos = s.find("ll");  // pos = 2
    
  • 提示:查找失败时需检查 pos == string::npos
rfind(const string& str)
  • 定义:从后往前查找子串,返回最后一次出现的位置。
  • 用法
    string s = "abab";
    size_t pos = s.rfind("ab");  // pos = 2
    

4. 字符串子串

substr(pos, len)
  • 定义:返回从位置 pos 开始的 len 个字符的子串(若省略 len,则截取到末尾)。
  • 用法
    string s = "hello";
    string sub = s.substr(1, 3);  // sub 为 "ell"
    
  • 提示substr(pos) 可用于截取后缀子串。

5. 字符串替换

replace(pos, len, const string& str)
  • 定义:将从位置 pos 开始的 len 个字符替换为 str
  • 用法
    string s = "hello";
    s.replace(1, 3, "XYZ");  // s 变为 "hXYZo"
    
  • 提示:替换前后的字符串长度可能不同,需注意后续字符位置变化。

6. 字符串比较

compare(const string& str)
  • 定义:比较两个字符串的字典序。返回值:
    • 0:相等
    • 负值:当前字符串小于 str
    • 正值:当前字符串大于 str
  • 用法
    string s1 = "abc";
    string s2 = "abd";
    cout << s1.compare(s2);  // 输出负值(如 -1)
    
  • 提示:更常用 ==<> 等运算符进行比较。

7. 字符串与数值转换

stoi(const string& str)
  • 定义:将字符串转换为整数(类似的有 stolstod 等)。
  • 用法
    string s = "123";
    int num = stoi(s);  // num = 123
    
  • 提示:若字符串格式非法,会抛出 invalid_argument 或 out_of_range 异常。
to_string(int value)
  • 定义:将数值转换为字符串(支持各种数值类型)。
  • 用法
    int num = 123;
    string s = to_string(num);  // s = "123"
    

注意事项

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

示例

#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! universereturn 0;
}

相关文章:

  • MySQL高级查询技巧:分组、聚合、子查询与分页【MySQL系列】
  • Spring Cache核心原理与快速入门指南
  • Python趣学篇:交互式词云生成器(jieba + Tkinter + WordCloud等)
  • day61—DFS—省份数量(LeetCode-547)
  • 27 C 语言编程核心:main 主函数(基本形式、返回值、参数、命令行传参)、多文件编程实践
  • 前端八股HTTP和https大全套
  • Socket编程之TCP套件字
  • 【HTML-15.2】HTML表单按钮全面指南:从基础到高级实践
  • 【Hot 100】55. 跳跃游戏
  • 如何获得Python的requirement.txt
  • C#数字金额转中文大写金额:代码解析
  • 流媒体基础解析:从压缩到传输的基本了解
  • springMVC-9数据格式化
  • JavaScript 模板字面量标签函数:解锁字符串处理的终极武器
  • Kafka数据怎么保障不丢失
  • Git入门到精通:30分钟掌握核心技巧
  • 《Spring Cloud Gateway 快速入门:从路由到自定义 Filter 的完整教程》​
  • Excel快捷键
  • STM32 串口通信①:USART 全面理解 + 代码详解
  • 2025年- H62-Lc170--34.在排序数组中查找元素的第一个和最后一个位置(2次二分查找,标记向左寻找,标记向右寻找)--Java版
  • 怎样才能做好网站优化/武汉好的seo优化网
  • 网站标签span/百度关键词seo排名优化
  • 外国做水吧设计的网站/网络推广方案怎么写
  • 佛山营销型网站设计/搜索引擎营销的主要方式有
  • 凡客建站手机版下载/百度网址大全旧版
  • 东营做网站优化的公司/武汉大学人民医院官网