标准C++无内置split函数,常用三种实现:stringstream适用于单字符或空白分隔;find+substr支持多字符分隔符且灵活可控;C++20的views::split提供懒求值、零拷贝的单字符分割。

标准C++没有内置的 split 函数,但可以用 std::string 配合 std::stringstream、std::string::find + std::string::substr,或 C++20 的 std::views::split 实现。下面给出三种常用、实用的实现方
式。
适合简单场景,比如按空格、制表符、换行符等空白字符分割(默认行为),或指定单一分隔符。
#include <vector>
#include <string>
#include <sstream>
<p>std::vector<std::string> split_by_space(const std::string& s) {
std::vector<std::string> tokens;
std::stringstream ss(s);
std::string token;
while (ss >> token) { // 自动跳过连续空白
tokens.push_back(token);
}
return tokens;
}</p><p>// 指定单一分隔符(如 ',')
std::vector<std::string> split_by_char(const std::string& s, char delim) {
std::vector<std::string> tokens;
std::string token;
std::istringstream tokenStream(s);
while (std::getline(tokenStream, token, delim)) {
tokens.push_back(token);
}
return tokens;
}
注意:std::getline 版本对连续分隔符(如 "a,,b")会生成空字符串;若想跳过空项,需额外判断 token.empty()。
更灵活,可处理任意长度的分隔符(如 "::"、">"),也便于控制是否保留空字段。
std::vector<std::string> split(const std::string& s, const std::string& delimiter) {
std::vector<std::string> tokens;
size_t start = 0;
size_t end = s.find(delimiter);
while (end != std::string::npos) {
tokens.push_back(s.substr(start, end - start));
start = end + delimiter.length();
end = s.find(delimiter, start);
}
tokens.push_back(s.substr(start)); // 加入最后一段
return tokens;
}
"a||b|||c")会产生空字符串,如需过滤,加一句 if (!token.empty()) tokens.push_back(token);
find 返回 npos,循环结束,剩余部分直接加入如果项目支持 C++20,推荐用 std::views::split,它返回一个视图(view),不立即拷贝字符串,内存友好,适合只读遍历场景。
#include <string>
#include <ranges>
#include <vector>
#include <algorithm>
<p>std::vector<std::string> split_cxx20(const std::string& s, char delim) {
auto split_view = s | std::views::split(delim);
std::vector<std::string> result;
for (auto chunk : split_view) {
std::string part(chunk.begin(), chunk.end());
result.push_back(part);
}
return result;
}
注意:目前 std::views::split 只支持单字符分隔符(char 或 std::string_view{1}),不支持多字符字符串作为分隔符;如需多字符,仍建议用 find+substr 方式。
基本上就这些。选哪种取决于你的 C++ 标准、分隔符复杂度和性能要求——简单分隔用 stringstream,通用可控用 find+substr,C++20 项目且追求简洁可读可用 views::split。
以上就是C++如何分割字符串?(split函数实现示例)的详细内容,更多请关注其它相关文章!
# c++
# stream
# go
# 绵阳门户网站建设优化
# 化妆刷推广营销词
# 排名下降的关键词
# 厦门好的网站优化公司
# 茂名产品营销推广
# 怎么用网页做网站推广
# 深圳市网站建设系统
# 园区seo优化有哪些
# 360关键词排名百度关
# 优化菜品图片的网站
# 管理机制
# 如何实现
# 何为
# 跳过
# 尼克
# 如需
# 三种
# 都是
# 多字
# 分隔符
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
PHP实现等比数列:构建数组元素基于前一个值递增的方法
PHP中动态类名访问的类实例类型提示与静态分析实践
口腔诊所管理软件推荐
如何编写一个符合 composer 规范的 post-install-cmd 脚本?
解决SQLAlchemy模型跨文件关联的Linter兼容性指南
米侠浏览器插件无法启用怎么办 米侠浏览器扩展兼容性修复
Magento 2 产品保存事件中安全更新属性的最佳实践
Chart.js 教程:自定义插件实现图表与图例间距调整
PHP多语言网站的实现:会话管理与翻译函数优化教程
汽水音乐网页版登录 汽水音乐网页端官方入口
Yandex无需登录畅游 俄罗斯搜索引擎最新官网指南
优化长HTML属性值:SonarQube警告与实用策略
如何在Golang中处理表单文件上传_Golang 表单文件上传示例
猫眼电影app如何参与官方的抽奖活动_猫眼电影官方抽奖参与方法
B站怎么开|直播| B站|直播|申请需要什么条件【新手必看】
在XML中嵌入二进制数据(如图片)的最佳实践是什么? Base64编码与解析注意事项
QQ邮箱官方登录页_腾讯出品安全稳定的邮箱服务
顺丰快递单号查询寄件人 顺丰寄件人查询入口
一点万象签到领积分指南
FullCalendar自定义按钮样式定制指南
Final Cut Pro视频加EQ教程
研招网官方网站招生平台入口_中国研究生招生信息网官网登录
搜狗浏览器如何查找页面中的文字 搜狗浏览器Ctrl+F页面搜索功能
哈尔滨城市通昵称修改方法
免费占卜在线神算_免费占卜手机神算
《宝可梦大集结》S4冠军之路开始时间介绍
掌握CSS :has() 选择器:父选择器、嵌套限制与常见陷阱解析
mysql如何回滚事务_mysql ROLLBACK事务回滚方法
iQOO手机信号差网络不稳定怎么办 信号问题原因排查与增强设置【攻略】
实现二叉树的层序插入:基于树大小的路径导航
抖音如何解除|直播|权限绑定_抖音关闭并解绑|直播|功能的方法
Go App Engine 项目结构与包管理深度指南
Highcharts雷达图轴线交点数值标注指南
sublime如何配置PHP开发环境_在sublime中运行与调试PHP代码
c++类和对象到底是什么_c++面向对象编程基础
抖音网页版地址直接进入_抖音网页版在线观看入口
使用jQuery精确检测除指定元素外任意位置的点击事件
鲨鱼剧场app金币获取方法
QQ网站入口直接登录 QQ官方正版登录页面
有道AI翻译入口 智能写作官方网站入口
diskgenius分区工具如何设置Bios启动项
Symfony路由参数转换器:实体存在性验证与错误处理策略
Flash AS3.0简易相册制作
Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析
申通快件单号查询平台 申通包裹物流动态跟踪
Windows自带的便笺数据如何备份_防止数据丢失的便利贴迁移教程【干货】
画质怪兽120帧安卓和平精英免费版
《暗黑破坏神4》国服回归送狂欢礼包 价值6916元
键盘保修需要什么_键盘售后维修流程
search中maxlength属性用法解析
2025-12-14
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。