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

C++ string操作指南:从入门到精通

一、为什么要用 string?

之前学的char[]缺点:

  • 必须手动处理\0,容易乱码
  • 不能直接用=赋值、+拼接
  • 长度受限,容易越界
  • 函数少,操作麻烦

string 优点:

  • 是 C++ 标准类,安全方便
  • 可以直接=+==比较
  • 自动管理内存,不用管\0
  • 内置大量常用函数

头文件:

#include <string> using namespace std;

二、string 定义与初始化

// 1. 空字符串 string s1; // 2. 直接初始化 string s2 = "hello world"; // 3. 构造方式 string s3("C++ string"); // 4. 重复 n 个字符 string s4(5, 'a'); // "aaaaa"

三、最常用操作(必背)

1. 赋值 =

string s; s = "hello";

2. 拼接 +

string s1 = "hello"; string s2 = " world"; string s3 = s1 + s2; // "hello world"

3. 访问单个字符(像数组一样)

string s = "hello"; cout << s[0]; // 'h' cout << s[1]; // 'e'

4. 比较 > < == !=

直接按字典序比较,非常方便:

string s1 = "apple"; string s2 = "banana"; if (s1 < s2) { … } // 成立 if (s1 == "apple") { … }

四、string 常用成员函数

1. 获取长度

int len = s.size(); // 常用 int len = s.length(); // 一样

2. 判断是否为空

if (s.empty()) { … }

3. 截取子串 substr

// 从下标 0 开始,取 3 个字符 string sub = s.substr(0, 3);

4. 查找 find(查找失败返回 string::npos)

int pos = s.find("llo"); if (pos != string::npos) { cout << "找到了,下标:" << pos; }

5. 替换 replace

// 从下标 2 开始,删除 2 个字符,替换成 "xx" s.replace(2, 2, "xx");

6. 插入 insert

s.insert(1, "++"); // 下标 1 处插入

7. 删除 erase

s.erase(2, 3); // 从下标 2 删 3 个字符

五、输入与输出

string s; cin >> s; // 遇到空格/回车停止 getline(cin, s); // 读取一整行(包括空格) cout << s << endl;

注意:cin >> s后如果要用getline,需要吸收换行符。


六、完整综合示例

#include <iostream> #include <string> using namespace std; int main() { string s = "hello c++"; cout << "长度:" << s.size() << endl; cout << "子串:" << s.substr(0, 5) << endl; int pos = s.find("c++"); if (pos != string::npos) { cout << "c++ 在下标:" << pos << endl; } s.replace(6, 3, "Python"); cout << "替换后:" << s << endl; system("pause"); return 0; }

七、string vs char [] 对比(面试常问)

表格

特性char[]string
内存固定大小,手动管理自动扩容
赋值 / 拼接不能直接=+可以直接用
结束符必须\0自动处理
安全性易越界、乱码更安全
功能极少非常丰富

一句话:C++ 写字符串优先用 string!


八、新手易错点

  1. 忘记#include <string>
  2. scanf/printf直接读写 string(会错)
  3. find没找到不判断,直接用下标
  4. 下标越界访问
  5. 混用cin >>getline导致读空行

九、今日重点总结

  1. string是 C++ 标准字符串,头文件<string>
  2. 支持直接=赋值、+拼接、==比较
  3. 常用函数:size() / empty() / substr() / find() / replace() / insert() / erase()
  4. 读整行用getline(cin, s)
  5. 比 char 数组更安全、更强大,优先使用
http://www.jsqmd.com/news/661483/

相关文章:

  • 2026年楼梯厂家推荐:沈阳市铁西区和鑫大宅楼梯经销门市部,钢板/卷板弧形/玻璃/双梁等多种楼梯供应 - 品牌推荐官
  • Ostrakon-VL-8B实战:JavaScript实现零售货架智能巡检Web应用
  • LaneNet训练提速指南:如何高效预处理TuSimple数据集并解决‘No module named ‘trainner’等常见报错
  • 【AGI全球争霸战深度解码】:中美欧日四大阵营技术路线、算力储备与人才战略全对比(2024权威白皮书级分析)
  • Python 遍历循环详细
  • 2026年监控杆厂家推荐:郑州坤悦交通设施,国标监控杆、L型八棱杆等全系供应,适配多场景交安项目 - 品牌推荐官
  • Guesstimate未来路线图:AI集成、私有部署和协作功能的展望
  • fsadfda
  • Winhance中文版:如何让Windows系统优化从技术挑战变成轻松日常?
  • 告别风扇噪音困扰:3分钟学会用FanControl智能调控Windows风扇转速
  • QtScrcpy键鼠映射终极教程:5分钟让手机游戏变PC体验
  • BiliBiliCCSubtitle终极指南:快速下载和转换B站CC字幕的完整教程
  • 2026届必备的六大降重复率助手推荐
  • 2026年控制/闸/安全/丝扣/铸钢阀门厂家推荐:广州市中奇阀门制造有限公司,适配多行业流体控制场景 - 品牌推荐官
  • 题解:洛谷 P1156 垃圾陷阱
  • 别再搞混了!LP/mm、Cycles/pixel这些分辨率单位到底怎么用?附换算表
  • ModuleNotFoundError: No module named ‘tensorboard‘ 的深度解析与一站式解决指南
  • 终极指南:Kaniko在边缘云环境中的分布式构建实践
  • 【蓝桥杯Web】从省赛真题到实战演练:十道经典题目背后的前端核心技能拆解
  • 从零开始贡献jest-extended:开源项目开发完全教程
  • 如何5分钟彻底优化Windows系统:Winhance中文版终极指南
  • 从零到一:基于Matlab与fruits-360数据集的水果识别实战
  • 2026年35#锻圆、35#钢棒等圆钢产品厂家推荐:无锡市百帮特钢有限公司,多类型圆钢产品供应 - 品牌推荐官
  • 2026年澳洲移民中介推荐,热门品牌性价比与服务质量对比 - 工业设备
  • Python 循环函数详细介绍
  • 3分钟掌握B站缓存视频转换:m4s-converter完整使用指南
  • 为什么 ABAP CDS View 的 $session 结构里有 system_date 字段,但却没有 system_time?
  • 2026年消防泵厂家推荐:深圳中弘时代智能装备科技有限公司,便捷式/应急/森林/高扬程/柴油等消防泵全系供应 - 品牌推荐官
  • GetQzonehistory:3步永久保存你的QQ空间青春记忆
  • 你的 Vue 路由,VuReact 会编译成什么样的 React 路由?