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

373 0
Honkers 2026-5-7 15:59:20 来自手机 | 显示全部楼层 |阅读模式

一、上期回顾

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


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

C 语言字符数组短板:

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

C++ string 优势:

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

三、string 常见构造方式

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. // 1. 空字符串
  7. string s1;
  8. // 2. 用字符串常量构造
  9. string s2("hello");
  10. // 3. 简化写法
  11. string s3 = "world";
  12. // 4. 拷贝构造
  13. string s4(s2);
  14. // 5. n个相同字符
  15. string s5(5, 'a');
  16. cout << s2 << endl;
  17. cout << s3 << endl;
  18. cout << s5 << endl;
  19. return 0;
  20. }
复制代码

四、string 赋值与拼接

1. 直接赋值

  1. string s;
  2. s = "C++ STL";
  3. s = 'A';
复制代码

2. 拼接两种方式

  1. string a = "hello";
  2. string b = " world";
  3. // 方式1:+ 拼接
  4. string c = a + b;
  5. // 方式2:append
  6. a.append(b);
  7. a.append(3, '!');
复制代码

五、string 常用遍历方式

  1. string s = "abcde";
  2. // 1. 下标遍历
  3. for(int i = 0; i < s.size(); i++)
  4. {
  5. cout << s[i] << " ";
  6. }
  7. // 2. 迭代器遍历
  8. for(string::iterator it = s.begin(); it != s.end(); it++)
  9. {
  10. cout << *it << " ";
  11. }
  12. // 3. 范围for(C++11)
  13. for(char ch : s)
  14. {
  15. cout << ch << " ";
  16. }
复制代码

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

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

七、string 与 C 字符数组互转

  1. // string 转 char*
  2. string s = "hello";
  3. const char* str = s.c_str();
  4. // char* 转 string
  5. char arr[] = "C language";
  6. string s2 = arr;
复制代码

八、字符串比较

直接用运算符,不用 strcmp

  1. string a = "abc";
  2. string b = "abd";
  3. if(a == b) cout << "相等";
  4. if(a < b) cout << "a更小";
复制代码

九、完整综合示例代码

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. string s1 = "Hello";
  7. string s2 = " C++STL";
  8. // 拼接
  9. string s3 = s1 + s2;
  10. cout << "拼接:" << s3 << endl;
  11. // 长度
  12. cout << "长度:" << s3.size() << endl;
  13. // 查找
  14. int pos = s3.find("STL");
  15. if(pos != string::npos)
  16. cout << "STL 位置:" << pos << endl;
  17. // 截取
  18. string sub = s3.substr(0,5);
  19. cout << "子串:" << sub << endl;
  20. return 0;
  21. }
复制代码

十、今日核心总结

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

十一、课后练习

  1. 输入一个字符串,遍历打印每个字符
  2. 查找字符串中指定字符的位置
  3. 截取前 3 个字符生成新串
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行