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

C++中substr()函数详解

C++ 中 substr 函数详解

substr 是 C++ 标准库中 std::string 类的成员函数,用于从字符串中提取子串。它是字符串处理中常用的工具,掌握其用法能高效处理字符串截取需求。

思维导图

函数原型

std::string 提供了一种重载形式的 substr 函数:

函数原型说明
string substr(size_t pos = 0, size_t count = npos) const;从字符串中提取子串,返回新的 std::string 对象

参数说明

参数类型含义注意事项
possize_t(无符号整数)子串的起始位置(从 0 开始计数的索引)- 若 pos 超过字符串长度,会抛出 out_of_range 异常
- 若 pos 等于字符串长度,返回空字符串
countsize_t(无符号整数)要提取的字符数量(可选参数)- 默认值为 npos(一个特殊常量,表示“直到字符串末尾”)
- 若 pos + count 超过字符串长度,自动截断到字符串末尾

返回值

返回一个新的 std::string 对象,包含从原字符串中提取的子串(原字符串不会被修改)。

示例代码

以下示例展示了 substr 的常见用法:

#include <iostream>
#include <string>using namespace std;int main() {string str = "C++ is fun!";cout << "原字符串:" << str << endl; // 输出:C++ is fun!// 1. 只指定起始位置(提取从 pos 到末尾的所有字符)string sub1 = str.substr(5); cout << "substr(5):" << sub1 << endl; // 输出:is fun!(从索引5开始)// 2. 指定起始位置和提取长度string sub2 = str.substr(0, 3); cout << "substr(0, 3):" << sub2 << endl; // 输出:C++(从索引0开始,提取3个字符)// 3. 提取长度超过剩余字符(自动截断)string sub3 = str.substr(5, 20); cout << "substr(5, 20):" << sub3 << endl; // 输出:is fun!(剩余字符不足20个)// 4. 提取整个字符串(等效于复制)string sub4 = str.substr(0); cout << "substr(0):" << sub4 << endl; // 输出:C++ is fun!// 5. 起始位置等于字符串长度(返回空字符串)string sub5 = str.substr(str.size()); cout << "substr(str.size()) 长度:" << sub5.size() << endl; // 输出:0return 0;
}

注意事项

注意点说明
索引合法性必须保证 pos <= str.size(),否则会抛出 out_of_range 异常。建议使用前检查:
if (pos <= str.size()) { ... }
无符号类型陷阱poscountsize_t(无符号类型),若用负数赋值会导致异常(例如 substr(-1) 会编译错误或运行崩溃)。
性能影响substr 会创建新字符串,频繁调用可能影响性能(尤其是长字符串)。
substr 类似的函数C 语言中的 strncpy 也可截取字符串,但 substr 更安全(自动处理边界)。
http://www.dtcms.com/a/481765.html

相关文章:

  • 乐迪信息:煤矿堆煤隐患难排查?AI摄像机实时监控与预警
  • Deep Dive into LLMs like ChatGPT 学习笔记
  • AI-大模型接入
  • 4.Windows Server 磁盘管理(1)
  • 后端三层架构
  • PyTorch 实现多模型集成与 VGG 在 CIFAR-10 上的应用
  • 网站建设所需费用明细长沙优化官网收费标准
  • NVMe高速传输之摆脱XDMA设计52: 上板资源占用率分析
  • 青岛建网站的公司有哪些wordpress能用手机管理吗
  • 2.游戏中的Buff系统设计
  • 解锁网络性能优化利器HTTP/2C
  • 基于 React + Go + PostgreSQL + Redis 的管理系统开发框架
  • Flink Checkpoint 设计理念深度解析(附源码)
  • 从 TF-IDF 到 Word2Vec:让推荐系统更懂语义
  • 01-ELK安装ES,ES-head
  • OpenCV4-直方图与傅里叶变换-项目实战-信用卡数字识别
  • 医院排班挂号系统小程序
  • 河北建设厅网站打不开是什么原因国际新闻直播
  • C++设计模式_行为型模式_命令模式Command
  • Blender自动化展UV插件 UV Factory 4.3 v1 – Powerful Modular Uv Tools
  • 网络与通信安全课程复习汇总2——信息保密
  • 密码学安全:CIA三元组与三大核心技术
  • 建网站怎么做本地的营销网站建设
  • 短剧分销系统技术拆解:渠道推广码生成、订单归因与实时分账系统实现
  • ​RocketMQ 与 RabbitMQ 全面对比:架构、性能与适用场景解析
  • RabbitMQ 消息可靠投递
  • RabbitMQ全面详解:从核心概念到企业级应用
  • 北京市建设工程第四检测所网站小程序定制开发团队
  • 安徽网站优化flash如何做网页
  • AI文档处理:AI在处理扫描版PDF时准确率低,如何提升?