新闻中心

C++如何分割字符串?(split函数实现示例)

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

c++如何分割字符串?(split函数实现示例)

标准C++没有内置的 split 函数,但可以用 std::string 配合 std::stringstreamstd::string::find + std::string::substr,或 C++20 的 std::views::split 实现。下面给出三种常用、实用的实现方式。

用 stringstream 按空格或单字符分隔

适合简单场景,比如按空格、制表符、换行符等空白字符分割(默认行为),或指定单一分隔符。

#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()

用 find + substr 手动切分(支持多字符分隔符)

更灵活,可处理任意长度的分隔符(如 "::"">"),也便于控制是否保留空字段。

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:用 views::split(懒求值、零拷贝)

如果项目支持 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 只支持单字符分隔符(charstd::string_view{1}),不支持多字符字符串作为分隔符;如需多字符,仍建议用 find+substr 方式。

基本上就这些。选哪种取决于你的 C++ 标准、分隔符复杂度和性能要求——简单分隔用 stringstream,通用可控用 find+substr,C++20 项目且追求简洁可读可用 views::split

以上就是C++如何分割字符串?(split函数实现示例)的详细内容,更多请关注其它相关文章!


# c++  # stream  # 分隔符  # 多字  # 都是  # 三种  # go  # 汕头网站建设比较好  # 杭州seo网站推广效果  # 亚马逊seo如何做销售  # 广东定制网站建设设计  # 略阳短视频seo  # 大良外贸网站建设  # 安阳网站建设排名  # 网站建设暗藏套路  # 时代seo优化价格比较  # 苏仙区网站建设推广公司  # 管理机制  # 如何实现  # 何为  # 跳过  # 尼克  # 如需 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 如何在 Windows 11 中启动游戏手柄设置  特斯拉自动驾驶房车计划曝光 原型车将于2027年亮相  Mac终端命令大全_Mac常用Terminal指令速查  sublime如何配置Python开发环境_将sublime打造成轻量级Python IDE  CSS布局中意外空白:解决padding-top导致的顶部间距问题  J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析  Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达  J*aScript中管理异步API调用:确保操作顺序与数据一致性  Win11怎么设置开机NumLock亮 Win11修改注册表InitialKeyboardIndicators值  深入理解与实现最大堆的Heapify过程:常见错误与修正  在哪找SublimeJ远程工具_SFTP插件配置教程  sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤  excel如何生成目录 excel一键生成工作表目录超链接  ACG动漫手机版官网入口 手机ACG动漫APP在线观看正版  C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能  J*aScript实现单选按钮与关联输入框的联动禁用教程  Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求  俄罗斯Yandex免登录入口_Yandex搜索引擎官网一键直达  mysql如何设置表访问权限_mysql表访问权限配置  《刺客信条4:黑旗》重制版新细节曝光:无缝加载 地图更细致!  sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件  Go语言中动态执行代码字符串的策略与实践  mc.js游戏直达 mc.js网页免下载版本秒进地址  解决Flask中Quill编辑器内容提交失败及TypeError的指南  Pyrogram与g4f集成:异步编程实践与常见错误解决  印象笔记如何设提醒任务防漏执行_印象笔记设提醒任务防漏执行【任务提醒】  学习通网页版官方登录 超星学习通电脑端入口指南  Golang如何安装Swagger工具_GoSwagger文档生成环境  yy漫画网页版官方入口_yy漫画官网登录页面链接  Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法  支付宝如何设置安全保护_支付宝安全设置的全面教程  AO3最新入口2025公告_AO3中文官网合集  机器学习中对数变换预测结果的反向还原  LocoySpider如何部署到云服务器_LocoySpider云部署的远程配置  Win10怎么设置静态IP地址 Win10手动配置IP地址步骤【指南】  支付宝碰一碰设备是REDMI手机吗 博主拆机辟谣:处理器、内存都不一样  千牛数据看板网页版_千牛数据看板网页版访问方法  CSS Grid如何控制元素对齐_align-items与justify-items组合使用  c++项目目录结构应该如何组织_c++工程化项目结构规范  如何提高微信支付的安全性_微信支付安全防护与设置建议  谷歌google账号注册详细步骤 谷歌账号注册官方教程  微博网页版首页入口 微博电脑端官网登录链接  谷歌google账号怎么注册账号 谷歌账号注册官方流程  消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技  2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析  QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台  外媒分析《GTA6》定价:卖100美元可以但真没必要!  Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】  Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】  Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口 

搜索