c++ 字符串切分split

c++ 字符串切分split 的举例实现
一共给出了四种方式
1、 strtok
2、 stringstream
3、 字符串查找
4、 基于封装的方式,提供了 c++11 foreach 接口

代码

vector<string> split(string s) {vector<string> res;const char *p = strtok((char *) s.c_str(), " ");res.push_back(p);while ((p = strtok(NULL, " "))) {res.push_back(p);}return res;
}vector<string> split2(string s) {vector<string> res;stringstream ss(s);string tmp;while (ss >> tmp) {res.push_back(tmp);}return res;
}vector<string> split3(string s) {vector<string> res;auto start = s.find_first_not_of(" ", 0);auto pos = s.find_first_of(" ", start);while (string::npos != start) {res.push_back(s.substr(start, pos - start));start = s.find_first_not_of(" ", pos);pos = s.find_first_of(" ", start);}return res;
}class Splitor;class SplitorIte {
private:Splitor *sp;string s;public:static string splitorIteNULL;SplitorIte(Splitor *sp);SplitorIte();SplitorIte &operator++();string operator*() {return s;}bool operator!=(const SplitorIte &other) {return s != other.s;}
};string SplitorIte::splitorIteNULL = "!!!!!!!";class Splitor {
private:string s;unordered_set<char> des;int start = 0;bool allow_empty = false;
public:Splitor(const string &s, string delim, bool allow_empty = false) : s(s), des(delim.begin(), delim.end()),allow_empty(allow_empty) {}auto operator()() -> string {string res;do {int p = start;// 如果当前就是if (p >= s.size()) {return SplitorIte::splitorIteNULL;}if (allow_empty && des.count(s[p])) {start++;return "";}// 找到第一个非while (p < s.size() and des.count(s[p])) p++;if (p == s.size()) {return SplitorIte::splitorIteNULL;}// 找到第一个是int q = p + 1;while (q < s.size() and !des.count(s[q])) q++;res = s.substr(p, q - p);start = q + 1;} while (!allow_empty && res.empty());return res;}SplitorIte begin() {return {this};}SplitorIte end() {return {};}
};SplitorIte::SplitorIte(Splitor *sp) : sp(sp) {s = (*sp)();
}SplitorIte::SplitorIte() {sp = nullptr;s = splitorIteNULL;
}SplitorIte &SplitorIte::operator++() {s = (*sp)();return *this;
};int main() {cout << "允许出现空格:\n";string s = "a ssst";Splitor sp(s, "s", true);int i = 0;for (auto str: sp) {cout << i << "\t[" << str << "]" << endl;i++;}cout << "不允许出现空格:\n";Splitor esp(s, "s");i = 0;for (auto str: esp) {cout << i << "\t[" << str << "]" << endl;i++;}
}

输出

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/659128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hbuilderx uniapp运行到真机控制台显示手机端调试基座版本号1.0.0,调用uni.share提示打包时未添加share模块

记录一个困扰了几天的一个蠢问题&#xff0c;发现真相的我又气又笑。 由于刚开始接触uniapp 移动端开发&#xff0c;有个需求需要使用uni.share API&#xff0c;但是我运行项目老提示打包时没配置share模块 我确实没在manifest内配置。网上搜了一些资料&#xff0c;但是我看官…

在Excel把两个单元格的内容,合并后显示在第三个单元格

在Excel中&#xff0c;将两个单元格的内容合并显示到第三个单元格有几种方法&#xff1a; 1. 使用 CONCATENATE 函数&#xff08;在较早版本的 Excel 中&#xff09;&#xff1a; 在目标单元格&#xff08;例如 C1&#xff09;中输入以下公式&#xff1a; CONCATENATE(A…

比Filebeat更强大的日志收集工具-Fluent bit的http插件实战

文章目录 1.前言2. fluent bit http插件配置以及参数详解3. Http 接口服务3.1 开发Http 接口服务3.2 重启fluent bit向http web服务发送数据 1.前言 Fluent Bit 的 HTTP 插件提供了一种灵活而通用的机制&#xff0c;可用于将日志数据 从各种环境中传输到指定的远程服务器&#…

EDR、SIEM、SOAR 和 XDR 的区别

在一个名为网络安全谷的神秘小镇&#xff0c;居住着四位守护者&#xff0c;他们分别是EDR&#xff08;艾迪&#xff09;、SIEM&#xff08;西姆&#xff09;、SOAR&#xff08;索亚&#xff09;和XDR&#xff08;艾克斯&#xff09;。他们各自拥有独特的能力&#xff0c;共同守…

TypeScript 基础概念,安装使用

怎么使用TypeScript&#xff1f; 本地环境搭建&#xff08;使用vscode&#xff09; 1、初始化项目&#xff0c;新建package.json 创建项目文件夹 mkdir test使用npm初始化项目 npm init 2、安装typescript npm install typescript -D 3、将typescript编译成JavaScript npx tsc…

力扣hot100 电话号码的字母组合 回溯

Problem: 17. 电话号码的字母组合 文章目录 思路复杂度&#x1f49d; Code 思路 &#x1f468;‍&#x1f3eb; 参考题解 复杂度 时间复杂度: O ( 3 8 ) O(3^8) O(38) 空间复杂度: O ( 3 8 ) O(3^8) O(38) &#x1f49d; Code class Solution {String[] map { "…

Redis 实际项目中的整合,记录各种用法

Redis缓存餐厅数据 我们来看主要的流程 很简单,就是在数据库和接口之间加了一层缓冲,在redis之前其实还可以加其他的缓存 例如 nginx的缓存 接下来,就是结合我的业务,来做缓存 我这里的业务逻辑是,按了分类的按钮,分别以不同的 分类为一组缓存数据 所以,这里的缓存粒度是分类…

leetcode-存在重复元素 II

219. 存在重复元素 II 题解&#xff1a; 可以使用哈希表来解决这个问题。遍历数组&#xff0c;对于每个元素&#xff0c;检查它是否已经在哈希表中出现过&#xff0c;如果出现过&#xff0c;则判断当前索引与哈希表中存储的索引之差是否小于等于k&#xff0c;如果是&#xff…

【JS逆向实战-入门篇】某gov网站加密参数分析与Python算法还原

文章目录 1. 写在前面2. 请求分析3. 断点分析4. 算法还原 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋…

java中Ajax与Axios的使用

1&#xff0c;Ajax 1.1 概述 AJAX (Asynchronous JavaScript And XML)&#xff1a;异步的 JavaScript 和 XML。 我们先来说概念中的 JavaScript 和 XML&#xff0c;JavaScript 表明该技术和前端相关&#xff1b;XML 是指以此进行数据交换。而这两个我们之前都学习过。 1.1.…

python-- 函数

在python中的函数&#xff1a; """1、python中的函数就类似于java中的方法&#xff1b;2、函数的语法的规则&#xff1a;def 函数的名称(参数1&#xff0c;参数2)&#xff1a;执行的逻辑return 结果值在定义函数的时候&#xff0c;参数的类型是可以不用指定的。…

element ui组件 el-input只能数据整数,且设置不能小于0大于10

<el-input v-model"form.plan" type"number" step"0.5" min"0" max"10" keyup.native"proving($event)" input"editInput($event,plan)" placeholder"最高5分" oninput"if(value…

iOS开发Xcode中的ld64和-ld_classic是什么意思

在iOS应用程序开发中&#xff0c;Xcode是一款广泛使用的集成开发环境&#xff08;IDE&#xff09;&#xff0c;而链接器是构建应用程序的关键组成部分之一。在Xcode中&#xff0c;我们常常会遇到两个重要的概念&#xff1a;ld64和-ld_classic。它们分别代表了默认链接器和经典链…

前端大屏展示可视化——地图的绘制(持续更新)

一、ECharts 1、安装 npm install echarts2、引入 import * as echarts from echarts;3、渲染 3.1、前期准备&#xff0c;基础配置 // 地图实例 const myChart ref(null); // 地图配置 const option reactive({tooltip: {trigger: item,formatter: function (params) {re…

电脑风扇控制温度软件 Macs Fan Control Pro 中文

Macs Fan Control Pro是一款专为Mac用户设计的风扇控制软件&#xff0c;旨在提供更精细的风扇转速控制和温度监控。这款软件通过实时监测Mac内部硬件的温度&#xff0c;自动或手动调整风扇的转速&#xff0c;以确保系统温度保持在理想范围内。 Macs Fan Control Pro提供了直观…

wps隔行填充效果斑马线

1、首先要打开WPS Office软件。 2、用“所有线框”工具绘制一个表格。 3、点击颜料桶&#xff0c;选中颜色&#xff0c;在第二排填充。4、用鼠标选中前两排表格。 5、把鼠标放到单元格右下角的节点上&#xff0c;待“”出来&#xff0c;用鼠标向下拖动到最后一列表格。 6、表格…

【01】Linux 基本操作指令

带⭐的为重要指令 &#x1f308; 01、ls 展示当前目录下所有文件&#x1f308; 02、pwd 显示用户当前所在路径&#x1f308; 03、cd 进入指定目录&#x1f308; 04、touch 新建文件&#x1f308; 05、tree 以树形结构展示所有文件⭐ 06、mkdir 新建目录⭐ 07、rmdir 删除目录⭐…

Ubuntu server如何使用 Daphne + Nginx + supervisor部署 Django

Django从 3.0版开始加入对ASGI的支持,使Django开始具有异步功能。 截止目前的5.0版,对异步支持逐步也越来越好,相信在未来的版本中异步将会支持的更加完善。 所以说,我们也需要适时的更新我们的技能,学会在asgi异步服务器环境中部署django项目! 在部署之前我们所有的依…

赋能未来社区:数据中台智慧园区的全方位解决方案_光点科技

在信息技术与互联网快速发展的今天&#xff0c;传统的园区管理方式已无法满足时代对效率与智能化的追求。数据中台作为企业数字化转型的核心&#xff0c;正引领着智慧园区的发展趋势。一个集成了数据中台的智慧园区&#xff0c;不仅能有效地整合资源&#xff0c;优化管理流程&a…

2024美赛数学建模B题思路+代码

文章目录 1 赛题思路2 美赛比赛日期和时间3 赛题类型4 美赛常见数模问题5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 美赛比赛日期和时间 比赛开始时间&#xff1a;北京时间2024年2月2日&#xff08;周五&#xff…