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

C++ 面试必考点:string 类

在C++编程中,string类是处理字符串的核心工具,它提供了丰富的方法来简化字符串操作。相比于C风格的字符数组,string类更加安全、便捷且功能强大,还能避免C风格字符串处理中常见的内存管理问题和边界错误。

1. 构造与初始化(5 种)

1.1、默认构造:string()

创建空字符串。

示例:string str;(str 为空,str.empty()返回 true)

1.2、C 字符串初始化:string(const char* s)

用 C 风格字符串初始化。

示例:string str("hello");(str 内容为 "hello")

1.3、重复字符构造:string(size_t n, char c)

创建含 n 个重复字符 c 的字符串。

示例:string str(3, 'a');(str 为 "aaa")

1.4、复制构造:string(const string& str)

复制另一个 string 对象。

示例:string str1("test"); string str2(str1);(str2 与 str1 相同)

1.5、子串构造:string(const string& str, size_t pos, size_t len = npos)

从 str 的 pos 位置截取 len 个字符(len 省略则取到末尾)。

示例:string str1("abcdef"); string str2(str1, 2, 3);(str2 为 "cde")

2. 基础属性与操作(5 种)

2.1、size():返回字符串长度(字符数)。

示例:"hello".size();(返回 5)

2.2、empty():判断字符串是否为空(比size() == 0更简洁)。

示例:string().empty();(返回 true)

2.3、swap(string& str):交换两个字符串的内容(高效,无额外拷贝)。

示例:str1.swap(str2);(交换 str1 和 str2 的值)

2.4、clear():清空字符串(长度变为 0)。

示例:str.clear();(清空后str.empty()为 true)

2.5、capacity():返回当前内存可容纳的最大字符数(不重新分配内存的情况下)。

示例:string str(10, 'a'); str.capacity();(通常≥10)

3. 赋值与拼接(6 种)

3.1、operator=:直接赋值。

示例:str2 = str1;(str2 复制 str1 的内容)

3.2、assign(const string& str):赋值(与operator=功能一致,更灵活)。

示例:str.assign("new");(str 变为 "new")

3.3、operator+:拼接两个字符串(返回新字符串)。

示例:string res = "a" + string("b");(res 为 "ab",注意:"a" + "b" 会报错,必须用 string("b") 转换)

3.4、operator+=:追加内容到当前字符串。

示例:str += "xyz";(在 str 末尾追加 "xyz")

3.5、append(const string& str):追加字符串(与operator+=类似,支持更多参数,如append("123", 2))。

示例:str.append("123");(等价于str += "123")

3.6、push_back(char c):追加单个字符(比+=更高效)。

示例:str.push_back('!');(在 str 末尾加 '!')

4. 比较操作(3 种)

4.1、operator==:判断两个字符串是否相等。

示例:"abc" == string("abc");(返回 true)

4.2、operator!=:判断两个字符串是否不等。

示例:"abc" != "abd";(返回 true)

4.3、compare(const string& str):精细比较(返回整数:0 = 相等,正数 = 当前串大,负数 = 当前串小)。

示例:"apple".compare("banana");(返回负数,因 "apple" < "banana")

5. 查找与定位(6 种)

5.1、find(const string& sub, size_t pos = 0):从 pos 开始正向查找子串 sub,返回首次出现的索引(未找到返回string::npos)。

示例:"abcabc".find("bc");(返回 1)

5.2、rfind(const string& sub, size_t pos = npos):从 pos 开始反向查找子串 sub,返回最后出现的索引。

示例:"abcabc".rfind("bc");(返回 4)

5.3、find_first_of(const string& chars, size_t pos = 0):查找 chars 中任意字符首次出现的位置。

示例:"hello".find_first_of("aeiou");(返回 1,即 'e' 的位置)

5.4、find_last_of(const string& chars, size_t pos = npos):查找 chars 中任意字符最后出现的位置。

示例:"hello".find_last_of("aeiou");(返回 4,即 'o' 的位置)

5.5、find_first_not_of(const string& chars, size_t pos = 0):查找首个不在 chars 中的字符位置。

示例:"xxyzz".find_first_not_of("xyz");(返回npos,因所有字符都在集合中)

5.6、find_last_not_of(const string& chars, size_t pos = npos):查找最后一个不在 chars 中的字符位置。

示例:"a1b2c3".find_last_not_of("abc");(返回 5,即 '3' 的位置)

6. 访问与截取(4 种)

6.1、operator[]:访问指定索引的字符(无越界检查,高效)。

示例:"hello"[1];(返回 'e')

6.2、at(size_t pos):访问指定索引的字符(越界时抛out_of_range异常,安全)。

示例:"hello".at(1);(返回 'e')

6.3、front():获取首个字符(支持修改)。

示例:str.front() = 'A';(将 str 首字符改为 'A')

6.4、substr(size_t pos = 0, size_t len = npos):截取子串(从 pos 开始,取 len 个字符,len 省略则取到末尾)。

示例:"hello world".substr(6);(返回 "world")

7. 修改与删除

7.1、erase(size_t pos = 0, size_t len = npos):删除子串(从 pos 开始删 len 个字符)。

示例:str.erase(2, 3);(删除 str 中从索引 2 开始的 3 个字符)

7.2、pop_back():删除最后一个字符(简洁高效)。

示例:str.pop_back();(删除 str 末尾字符)

7.3、使用 string.insert()进行插入操作

string& insert(size_t pos,const string&str); // 在位置 pos 处插入字符串 str string& insert(size_t pos,const string&str,size_t subpos,size_t sublen); // 在位置 pos 处插入字符串 str 的从位置 subpos 处开始的 sublen 个字符 string& insert(size_t pos,const char * s); // 在位置 pos 处插入字符串 s string& insert(size_t pos,const char * s,size_t n); // 在位置 pos 处插入字符串 s 的前 n 个字符 string& insert(size_t pos,size_t n,char c); // 在位置 pos 处插入 n 个字符 c iterator insert (const_iterator p, size_t n, char c); // 在 p 处插入 n 个字符 c,并返回插入后迭代器的位置 iterator insert (const_iterator p, char c); // 在 p 处插入字符 c,并返回插入后迭代器的位置

梳理了几篇实用文章,覆盖多元技术路径与成长场景,供大家学习参考:

🔹明晰方向
若你希望理性看待C++的行业价值与发展空间,推荐阅读:👉为什么很多人劝退学C++,但大厂核心岗位还是要C++?——厘清认知,锚定技术信心。

🔹后端深耕
聚焦Linux C/C++后端方向?这份👉【大厂标准】Linux C/C++后端进阶学习路线》提供清晰路径与学习框架,助你系统构建能力体系。

🔹音视频入门
对流媒体开发感兴趣?👉《音视频流媒体高级开发 - 学习路线》梳理核心技术脉络,帮你搭建扎实的知识结构。

🔹Qt全场景实践
无论是桌面应用还是嵌入式开发,👉《C++ Qt学习路线一条龙!(桌面开发 & 嵌入式开发)》提供从入门到实战的完整学习闭环。

🔹内核探索
向往操作系统底层?👉《Linux内核学习指南,硬核修炼手册》分享深度学习思路与实践方法,适合沉心钻研的你。

🔹面试赋能
备战技术面试时,👉《C++高频八股文面试题1000题(三)》可作为知识点复盘与巩固的实用参考。

每一段成长都值得认真对待。愿这些内容成为你技术路上的温暖陪伴,稳步向前,静待花开🌱

http://www.jsqmd.com/news/419176/

相关文章:

  • 3种高效漫画资源聚合方案:打造个性化阅读体验的开源工具指南
  • EtherCAT从站XML配置文件一键生成实战:基于AX58100与TWinCAT的高效开发指南
  • 卡证检测矫正模型实战落地:中小企业证件数字化采集系统搭建指南
  • MedGemma 1。5模型安全部署:医院内网实践
  • 3步搞定Nanbeige4.1-3B:用Chainlit前端快速调用文本生成模型
  • Qwen3智能字幕对齐系统Java集成指南:SpringBoot后端开发
  • 彻底解决Xbox手柄在macOS系统的设备兼容难题
  • 颠覆性唇语识别革新:让无声表达重获“话语权“
  • LongCat-Image-Editn V2在工业设计中的创新应用
  • Springboot球类运动赛事组织平台pl1v1av6(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 2026年评价高的格力空调供应商公司推荐:家用全屋净水系统/家用地暖供应商/家用格力空调供应商/选择指南 - 优质品牌商家
  • RexUniNLU快速体验:10分钟搞定中文文本分类
  • PDF-Parser-1.0性能优化:Linux系统下的GPU加速方案
  • 番茄小说下载完全指南:3种方法永久保存心仪作品的高效解决方案
  • YOLOv12图片检测全攻略:一键标注+详细数据统计
  • B站评论全量解析:BilibiliCommentScraper零代码采集解决方案
  • 保姆级教程:无需代码,一键部署Qwen3-0.6B-FP8文本生成服务
  • Qwen3-0.6B-FP8极速对话工具:ComfyUI工作流优化
  • C++调用AnythingtoRealCharacters2511:高性能动漫转真人引擎开发
  • Grammarly高级版Cookie自动获取完全指南:从访问限制到自由使用的创新方案
  • 开源工具Win11Debloat:系统优化与效率提升完全指南
  • 3步打造你的专属漫画浏览工具:面向二次元爱好者的E-Viewer全攻略
  • 5个高效步骤让WinMemoryCleaner成为你的系统性能优化工具
  • Qwen3-TTS-12Hz-1.7B-VoiceDesign部署教程:开源镜像一键启用多语种语音合成
  • 告别论文格式焦虑:东南大学模板工具的高效解决方案
  • GLM-4-9B-Chat-1M超长上下文模型:5分钟快速部署指南
  • 架构设计:利用机器人梯控产品实现异构电梯系统的适配器模式
  • 30亿参数轻量化:南北阁Nanbeige 4.1-3B快速上手体验
  • 通义千问1.5-1.8B-Chat-GPTQ-Int4 Git操作智能指南:命令解释与问题排查
  • 1964年,克拉克预言了今天的AI:没猜对时间,却看透了未来