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

C++ string全面解析:从入门到精通

一、上期回顾

彻底吃透引用与指针底层差异、const 修饰规则、传参三种方式。从今天开始正式进入C++ STL 标准模板库深耕,先从最常用的string入手。


二、为什么要用 string 替代 C 语言 char []

C 语言字符数组短板:

  1. 长度固定,容易溢出
  2. 拼接、查找、截取需要手写逻辑
  3. 无法直接赋值、比较
  4. 函数传参容易退化指针、越界崩溃

C++string优势:

  1. 动态扩容,不用关心内存大小
  2. 自带赋值、拼接、查找、截取、替换全套接口
  3. 支持直接+拼接、==比较
  4. 面向对象封装,安全不易越界

三、string 常见构造方式

#include <iostream> #include <string> using namespace std; int main() { // 1. 空字符串 string s1; // 2. 用字符串常量构造 string s2("hello"); // 3. 简化写法 string s3 = "world"; // 4. 拷贝构造 string s4(s2); // 5. n个相同字符 string s5(5, 'a'); cout << s2 << endl; cout << s3 << endl; cout << s5 << endl; return 0; }

四、string 赋值与拼接

1. 直接赋值

string s; s = "C++ STL"; s = 'A';

2. 拼接两种方式

string a = "hello"; string b = " world"; // 方式1:+ 拼接 string c = a + b; // 方式2:append a.append(b); a.append(3, '!');

五、string 常用遍历方式

string s = "abcde"; // 1. 下标遍历 for(int i = 0; i < s.size(); i++) { cout << s[i] << " "; } // 2. 迭代器遍历 for(string::iterator it = s.begin(); it != s.end(); it++) { cout << *it << " "; } // 3. 范围for(C++11) for(char ch : s) { cout << ch << " "; }

六、核心常用接口(必背)

string s = "helloSTL"; // 1. 获取长度 s.size(); s.length(); // 2. 判断是否为空 s.empty(); // 3. 清空字符串 s.clear(); // 4. 截取子串 // pos起始位置, len长度 string sub = s.substr(0,5); // 5. 查找字符/字符串 // 找到返回下标,没找到返回 string::npos int pos = s.find("STL"); // 6. 替换 s.replace(0,5,"Hi"); // 7. 插入 s.insert(0,"###"); // 8. 删除 s.erase(0,3);

七、string 与 C 字符数组互转

// string 转 char* string s = "hello"; const char* str = s.c_str(); // char* 转 string char arr[] = "C language"; string s2 = arr;

八、字符串比较

直接用运算符,不用strcmp

string a = "abc"; string b = "abd"; if(a == b) cout << "相等"; if(a < b) cout << "a更小";

九、完整综合示例代码

#include <iostream> #include <string> using namespace std; int main() { string s1 = "Hello"; string s2 = " C++STL"; // 拼接 string s3 = s1 + s2; cout << "拼接:" << s3 << endl; // 长度 cout << "长度:" << s3.size() << endl; // 查找 int pos = s3.find("STL"); if(pos != string::npos) cout << "STL 位置:" << pos << endl; // 截取 string sub = s3.substr(0,5); cout << "子串:" << sub << endl; return 0; }

十、今日核心总结

  1. string替代 C 语言字符数组,动态内存、安全便捷
  2. 支持直接赋值、+拼接、关系运算符比较
  3. 三大遍历:下标、迭代器、范围 for
  4. 必会接口:size/empty/clear/substr/find/replace/insert/erase
  5. c_str()实现和 C 语言字符串互转

十一、课后练习

  1. 输入一个字符串,遍历打印每个字符
  2. 查找字符串中指定字符的位置
  3. 截取前 3 个字符生成新串
http://www.jsqmd.com/news/746190/

相关文章:

  • 同济高数第七版第一章:函数与极限,我用Python画图帮你理解(附代码)
  • 如何用命令行工具3分钟搞定光猫配置?zteOnu让你的网络管理效率飙升
  • Backtrader机器学习交易策略终极指南:从特征工程到智能部署的完整教程
  • 领域专用AI助手开发:提示工程与安全防护实战
  • 2026文昌航天一站式服务领域哪一家机构提供的服务更加专业 - 热敏感科技蜂
  • Solon AI v.. 发布(智能体开发框架,支持 Java 到 Java)
  • SOGo API开发指南:构建企业级协作应用的终极指南
  • 用机器学习守护心理健康:10个情绪识别与干预系统实战指南
  • 音频驱动的动态令牌压缩技术解析与应用
  • 【企业级Python数据库配置标准】:金融级加密传输+动态密钥轮换+审计日志闭环,已通过等保2.0三级认证
  • 用Python模拟「三个枪手」博弈:从零实现反向归纳法,手把手教你算胜率
  • 终极窗口分辨率自由:Simple Runtime Window Editor 三步实现游戏截图革命
  • 如何利用Laravel Debugbar的请求历史功能实现前后请求对比分析
  • 为什么汽车以太网PHY必须手动配主从?聊聊车载启动那几毫秒的生死时速
  • 终极Wireshark跨平台构建指南:掌握CMakeLists.txt编写技巧
  • 如何快速开发自定义MP4盒子:MP4Parser扩展格式完整指南
  • 为什么你的Java车载应用在-40℃无法启动?揭秘JVM内存模型在汽车MCU异构环境中的温度敏感性失效(附ARM Cortex-A72+Linux RT Patch调优参数)
  • 终极Instaparse性能优化指南:从二次时间复杂度到线性解析的实战秘籍
  • File Browser部署踩坑实录:从下载到汉化,一篇搞定CentOS 7下的常见报错
  • 为内部知识库问答系统集成 Taotoken 实现模型灵活切换
  • 20260503 投资反思——关于持续性利好的思考
  • 成本感知贝叶斯优化在交互设备设计中的应用
  • 如何在Windows系统上完整部署iperf3网络性能测试工具:实用指南与最佳实践
  • AIGC 检测升级 AI 率飙升,嘎嘎降AI 双引擎应对 AI 率降到 5% 以内!
  • 如何快速加强应用小龙虾 OpenClaw 持久记忆和知识库
  • 终极指南:如何在微服务架构中应用compression实现分布式系统高效压缩策略
  • 终极指南:卡尔曼滤波如何重塑气象科学 - 从阿波罗登月到气候变迁研究
  • 考研失利后的十字路口:从迷茫到行动,用算法与求职重塑自我
  • Places365模型对比分析:哪个CNN网络最适合你的场景识别需求?
  • R3nzSkin国服换肤工具终极指南:免费解锁全英雄皮肤