全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

c++如何分割字符串 c++ string split实现方法【技巧】

C++标准库无内置split函数,常用方法有:①stringstream按空白分割;②find+substr支持自定义分隔符;③regex处理复杂规则;④C++20 ranges::views::split提供视图式分割。

在C++中,标准库没有内置的 split 函数,但有多种简洁、安全、高效的方式实现字符串分割。关键在于:**避免手动处理边界、优先使用标准容器、注意空字段和分隔符连续的情况**。

std::stringstream 按空白符分割(最常用)

适合按空格、制表符、换行等默认空白字符切分,代码简洁,自动跳过多余空白:

std::vector split_by_whitespace(const std::string& s) {
    std::vector tokens;
    std::stringstream ss(s);
    std::string token;
    while (ss >> token) {  // 自动跳过连续空白
        tokens.push_back(token);
    }
    return tokens;
}
  • 输入 " hello world " → 输出 {"hello", "world"}
  • 不适用于自定义分隔符(如逗号、斜杠)

std::string::find + substr 实现通用分割

支持任意单字符或字符串分隔符,逻辑清晰,可控性强:

std::vector split(const std::string& s, const std::string& delimiter) {
    std::vector 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,,d" + "," → 输出 {"a","b","c","","d"}(保留空字段)
  • 若想忽略空字段,可在 push_back 前加 if (!token.empty()) 判断

std::regex 处理复杂分隔规则

适合需要正则匹配的场景(如“一个或多个空白”、“非字母数字字符”等):

std::vector split_regex(const std::string& s, const std::string& pattern) {
    std::vector tokens;
    std::regex re(pattern);
    std::sregex_iterator it(s.begin(), s.end(), re);
    std::sregex_iterator end;
    size_t last = 0;
    while (it != end) {
        size_t pos = it->position();
        tokens.push_back(s.substr(last, pos - last));
        last = pos + it->length();
        ++it;
    }
    tokens.push_back(s.substr(last)); // 尾部剩余部分
    return tokens;
}
  • 例如用 "\\s+" 替代 stringstream,效果类似但更灵活
  • 注意:正则开销较大,简单分割不推荐

现代C++(C++20起)可考虑 std::ranges::views::split

函数式风格,延迟求值,内存友好,但需编译器支持:

#include 
#include 
#include 

auto split_view = str | std::views::split(' ') | std::views::transform([](auto&& rng) { return std::string(rng.begin(), rng.end()); }); std::vector result(split_view.begin(), split_view.end());

  • 真正零拷贝切片(视图),转成 vector 才实际构造字符串
  • 目前主流项目仍以 C++17 兼容方案为主,建议先掌握前三种


# c++  # stream  # 标准库  # String  # if  # Token  # 字符串  # Regex  # 切片  # 分隔符  # 自定义  # 跳过  # 切分  # 多个  # 可在  # 三种  # 关键在于  # 有多种  # 转成 


相关文章: 如何在沈阳梯子盘古建站优化SEO排名与功能模块?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  已有域名如何免费搭建网站?  公司网站制作价格怎么算,公司办个官网需要多少钱?  常州自助建站费用包含哪些项目?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  存储型VPS适合搭建中小型网站吗?  建站之星导航如何优化提升用户体验?  广州美橙建站如何快速搭建多端合一网站?  非常酷的网站设计制作软件,酷培ai教育官方网站?  如何在云虚拟主机上快速搭建个人网站?  建站主机与虚拟主机有何区别?如何选择最优方案?  高防服务器租用指南:配置选择与快速部署攻略  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  如何快速建站并高效导出源代码?  寿县云建站:智能SEO优化与多行业模板快速上线指南  免费视频制作网站,更新又快又好的免费电影网站?  已有域名如何快速搭建专属网站?  贸易公司网站制作流程,出口贸易网站设计怎么做?  PHP正则匹配日期和时间(时间戳转换)的实例代码  建站之星好吗?新手能否轻松上手建站?  临沂网站制作企业,临沂第三中学官方网站?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  建站之星后台管理:高效配置与模板优化提升用户体验  如何批量查询域名的建站时间记录?  建站之星后台密码遗忘或太弱?如何重置与强化?  网站制作难吗安全吗,做一个网站需要多久时间?  ,柠檬视频怎样兑换vip?  建站主机与服务器功能差异如何区分?  b2c电商网站制作流程,b2c水平综合的电商平台?  香港服务器租用费用高吗?如何避免常见误区?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  建站主机无法访问?如何排查域名与服务器问题  创业网站制作流程,创业网站可靠吗?  php json中文编码为null的解决办法  ,sp开头的版面叫什么?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  如何快速重置建站主机并恢复默认配置?  建站VPS选购需注意哪些关键参数?  C++中引用和指针有什么区别?(代码说明)  建站之星会员如何解锁更多建站功能?  简单实现Android文件上传  建站之星安装需要哪些步骤及注意事项?  网站制作需要会哪些技术,建立一个网站要花费多少?  开源网站制作软件,开源网站什么意思?  如何通过VPS建站无需域名直接访问?  如何用狗爹虚拟主机快速搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。