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;共同守…

力扣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的缓存 接下来,就是结合我的业务,来做缓存 我这里的业务逻辑是,按了分类的按钮,分别以不同的 分类为一组缓存数据 所以,这里的缓存粒度是分类…

【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.…

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提供了直观…

【01】Linux 基本操作指令

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

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

在信息技术与互联网快速发展的今天&#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…

代码随想录算法刷题训练营day21

代码随想录算法刷题训练营day21&#xff1a;LeetCode(501)二叉搜索树中的众数、LeetCode(530)二叉搜索树的最小绝对差 LeetCode(501)二叉搜索树中的众数 题目 代码 import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;/*…

【Linux】多线程(线程概念+线程控制)

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

旧物回收小程序:环保与便捷的完美结合

随着社会的发展和人们生活水平的提高&#xff0c;消费行为也日益频繁&#xff0c;这导致了大量的废旧物品的产生。如何有效处理这些废旧物品&#xff0c;既保护环境&#xff0c;又节约资源&#xff0c;成为了一个重要的议题。此时&#xff0c;旧物回收小程序的出现&#xff0c;…

跟着pink老师前端入门教程-day14+15

2.6 main 主体模块制作 HTML&#xff1a; <div class"w"><div class"main"><!-- 焦点图模块 --><div class"focus"><ul><li><img src"./images/banner_bg.png" alt""></li>…

python给word插入脚注

1.需求 最近因为工作需要&#xff0c;需要给大量文本的脚注插入内容&#xff0c;我就写了个小程序。 2.实现 下面程序是我已经给所有脚注插入了两次文本“幸福”&#xff0c;给脚注2到4再插入文本“幸福” from win32com import clientdef add_text_to_specific_footnotes(…

会议会务报名签到互动抽奖视频图片直播公众号开发

会议会务报名签到互动抽奖视频图片直播公众号开发 现在越来越多的人进行网络签到&#xff0c;特别是大型的会务/展会&#xff0c;网络签到进场形式应用的越来越广泛也是发展的趋势&#xff1b;会助力智能会议管理系统&#xff1a;可以实现在线报名&#xff08;免费/付费/后台导…