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

C++基础系列【28】string的split

博主介绍:程序喵大人

  • 35- 资深C/C++/Rust/Android/iOS客户端开发
  • 10年大厂工作经验
  • 嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手
  • 《C++20高级编程》《C++23高级编程》等多本书籍著译者
  • 更多原创精品文章,首发gzh,见文末
  • 👇👇记得订阅专栏,以防走丢👇👇
    😉C++基础系列专栏
    😃C语言基础系列专栏
    🤣C++大佬养成攻略专栏
    🤓C++训练营
    👉🏻个人网站

C++标准库没有为std::string提供split方法,至于为什么没有提供,我查了很多资料,网上也有很多说法,但是我依旧没找到比较满意的答案。

肯定不是因为难以实现就是了,大概率是因为加了<font style="background-color:rgb(255,245,235);">split</font>会打破某种设计的哲学。

官方没有,但是还经常有这个需求(项目中,平时刷题,都会用到split),那就只能自己实现一个。

这里贴一个我经常在用的一个split的实现:

std::vector<std::string> stringSplit(const std::string& str, char delim) {
    std::stringstream ss(str);
    std::string item;
    std::vector<std::string> elems;
    while (std::getline(ss, item, delim)) {
        if (!item.empty()) {
            elems.push_back(item);
        }
    }
    return elems;
}

还有种常见的方式是使用C语言的strtok

std::vector<std::string> stringSplit(const std::string& strIn, char delim) {
    char* str = const_cast<char*>(strIn.c_str());
    std::string s;
    s.append(1, delim);
    std::vector<std::string> elems;
    char* splitted = strtok(str, s.c_str());
    while (splitted != NULL) {
        elems.push_back(std::string(splitted));
        splitted = strtok(NULL, s.c_str());
    }
    return elems;
}

如果你想使用split却不知道怎么实现,可以考虑从以上两种方式中挑一个,我更多的是用第一种。

码字不易,欢迎大家点赞关注评论,谢谢!


C++训练营

专为校招、社招3年工作经验的同学打造的1V1 C++训练营,量身定制学习计划、每日代码review,简历优化,面试辅导,已帮助多名学员获得大厂offer!


文章转载自:

http://Y632NyQn.mtymb.cn
http://2ChhuB7k.mtymb.cn
http://XrXzi3pA.mtymb.cn
http://hVfSGRZX.mtymb.cn
http://6aLGptO8.mtymb.cn
http://THOAraUG.mtymb.cn
http://M2ZeH5tx.mtymb.cn
http://m0kLPRYf.mtymb.cn
http://0NDINLuY.mtymb.cn
http://pdmUMgK5.mtymb.cn
http://sWtbEMJb.mtymb.cn
http://on9aWdXT.mtymb.cn
http://gtcHB9Fc.mtymb.cn
http://2CWeFdwP.mtymb.cn
http://5eSou3To.mtymb.cn
http://lYauVwMD.mtymb.cn
http://hzFNC1f8.mtymb.cn
http://yqUIZ3BI.mtymb.cn
http://lonZSXou.mtymb.cn
http://Ogy4ywCn.mtymb.cn
http://og8r8jTb.mtymb.cn
http://hWSO3Jly.mtymb.cn
http://O99UoAWo.mtymb.cn
http://oQQwq9If.mtymb.cn
http://9Wt3Y7Ah.mtymb.cn
http://NLrKjxNP.mtymb.cn
http://WrOJW2Br.mtymb.cn
http://0jvvQzlL.mtymb.cn
http://7vJjHIKV.mtymb.cn
http://P0oVk58h.mtymb.cn
http://www.dtcms.com/a/89651.html

相关文章:

  • SMOTE算法
  • C++类与对象的的第三个简单的实战练习-3.25笔记
  • SvelteKit 最新中文文档教程(10)—— 部署 Cloudflare Pages 和 Cloudflare Workers
  • 【HarmonyOS Next】三天撸一个BLE调试精灵
  • 记录firefly的3566-sdk的下载及解压更新
  • docker使用命令笔记
  • Java多线程精讲:线程操作与状态转换全解析
  • Mycat安装验证流程整理
  • 深度学习|表示学习|多头注意力在计算时常见的张量维度变换总结|28
  • C盘急救实录:从爆红到畅快
  • 量子计算模拟中的测量与噪声建模:基于 3 量子比特系统分析
  • AI-Sphere-Butler之Ubuntu服务器如何部署Nginx代理,并将HTTP升级成HTTPS,用于移动设备访问
  • 余弦退火算法与学习率预热
  • Apache HttpClient使用
  • 内核编程十二:打印task_struct中的数据
  • 高性能C#定时删除图片,包含定时触发、分批删除、异步处理和资源监控
  • JavaScript基础-常用的鼠标事件
  • 卷积神经网络的原理、实现及变体
  • c语言基础编程入门练习题(三)
  • 工欲善其事必先利其器————idea插件
  • 11_JavaScript_字符串方法+数学方法
  • react中防止数据多大并需要二次加工处理进行单线程转多线程webworker优化处理(不借助react-webworker)
  • Python Sanic面试题及参考答案
  • 东软鸿蒙C++开发面经
  • 网络华为HCIA+HCIP 防火墙
  • VLAN综合实验实验报告
  • git的进阶使用
  • Spring Boot JSON序列化深度管控:忽略指定字段+Jackson扩展策略破解双向实体循环引用问题
  • Linux -- 进程间通信(IPC)-- 进程间通信、管道、system V 共享内存、system V 消息队列、责任链模式 、system V 信号量
  • AI与数据的双向奔“赋”