string字符串进行分割

c++标准库中,对string字符串并没有提供分割操作,需要自己手动实现此功能。

方式1:

      采用 std::stringstream 输入字符串,通过getline()函数,来对字符串进行分割。

#include <sstream>void getSplit(std::string s, char cDelims, std::vector<std::string> & res)
{std::stringstream ss;ss << s;std::string t;while (getline(ss, t, cDelims))res.push_back(t);
}int main()
{std::string TestList2 = "123/456//789/100";std::vector<std::string> strDest3;getSplit(TestList2,'/',strDest3);return 0;
}

输出结果:

方式二:

      采用string的成员方法,find() 和substr()来对字符串进行分割。

int getSplit(std::string strSource,std::vector<std::string>& strDest, const std::string& strDelims)
{strDest.resize(0);const char* pdelims = strDelims.c_str();int nLimIndex = 0;int nLimLen = strDelims.length();int nContentIndex = 0;bool bContinue = true;while (bContinue){nLimIndex = strSource.find(pdelims, nContentIndex);if (nLimIndex == -1){bContinue = false;}else{strDest.push_back(strSource.substr(nContentIndex, nLimIndex - nContentIndex));nContentIndex += (nLimIndex - nContentIndex) + nLimLen;}}// 最后一个分隔符 后的内容加入strDest.push_back(strSource.substr(nContentIndex));return strDest.size();
}int main()
{std::string TestList2 = "123/456//789/100";std::vector<std::string> strDest3;getSplit(TestList2, strDest3, "/");return 0;
}

通过find()函数在查找索引值,对nContentIndex 进行添加达到偏移的效果。再使用substr(),获取对应的子符号,存放在vector中。

输出结果:

方式三:

采用string的成员方法find_first_not_of(),find_first_of()和substr(),达到分割效果

int getSplit(std::string strSource,std::vector<std::string>& strDest, const std::string& strDelims)
{int n = 0;	// i 需要的字符索引, j 分隔符所在的索引int i = 0;int j = 0;while (j != std::string::npos){i = strSource.find_first_not_of(strDelims.c_str(), j);if (i == std::string::npos || strSource.size() < i){break;}j = strSource.find_first_of(strDelims.c_str(), i);strDest.push_back(strSource.substr(i, j - i));n++;}return n;
}int main()
{std::string TestList2 = "123/456//789/100";std::vector<std::string> strDest3;getSplit(TestList2, strDest3, "/");return 0;
}

        注意:此方法,原理和方法二类似。在使用此方法时,如果字符串有空字符串不会被统计。

结果:

 和上面两种方式对比,此方法不会存放空字符串。

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

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

相关文章

探究前端路由hash和history的实现原理(包教包会)

今天我们来讲一讲前端中很重要的一个部分路由&#xff08;router&#xff09;&#xff0c;想必前端小伙伴对‘路由’一词都不会感到陌生。但是如果哪天面试官问你&#xff0c;能大概说一说前端路由的实现原理吗&#xff1f; 你又会如何应对呢&#xff1f; 今天勇宝就带着大家一…

移动端WEB开发之响应式布局推特

1&#xff0c;响应式开发 1.1 响应式开发原理 就是使用媒体查询针对不同宽度的设备进行布局和样式的设置&#xff0c;从而适配不同设备的目的 设备划分 尺寸区间 超小屏幕&#xff08;手机&#xff09; …

项目技术栈-解决方案-消息队列

项目技术栈-解决方案-消息队列 概念应用场景1. 异步处理 参考文章消息队列&#xff08;Message Queue&#xff09; 概念 “消息”是在两台计算机间传送的数据单位。 消息可以非常简单&#xff0c;例如只包含文本字符串&#xff1b; 也可以更复杂 &#xff0c;包括对象等。 队…

springboot+maven项目导入本地jar包,以有打包错误问题

1 本地jar包放置路径为&#xff1a; 2添加Modules File->project settings–>Modules–>Dependencies–>–>, 3 添加 Libraies 至此 项目即可成功运行。 mvn 打包错误&#xff0c;需要 运行以下命令 mvn install:install-file -Dfile${project.basedir}/s…

element-plus+vue3项目(侧边栏菜单的使用和历史记录切换问题的解决(高点效果对应不上))

一、使用element-plus的菜单,侧边栏类型 导入element-plus,安装方式有如下几种: # 选择一个你喜欢的包管理器# NPM $ npm install element-plus --save# Yarn $ yarn add element-plus# pnpm $ pnpm install element-plus 在main.js引入和使用: import { createApp } f…

特斯拉一面算法原题

来自太空的 X 帖子 埃隆马斯克&#xff08;Elon Musk&#xff09;旗下太空探索技术公司 SpaceX 于 2 月 26 号&#xff0c;从太空往社交平台 X&#xff08;前身为推特&#xff0c;已被马斯克全资收购并改名&#xff09;发布帖子。 这是 SpaceX 官号首次通过星链来发送 X 帖子&a…

【Acwing】差分矩阵

图1&#xff1a;a和b数组映射表 由于a是b的前缀和数组&#xff0c;因此改变b[ x1][ y1]之后&#xff0c;受到影响的a中元素如右半图所示 图2&#xff1a;求b数组的前缀和 #include<bits/stdc.h> using namespace std;int n,m,q; int a[1010][1010]; int b[1010][1010]…

Vue概念详解【目录】

本专栏简介&#xff1a; 这个专栏是关于 Vue2 和 Vue3 各种概念的大集合&#xff01;它深入挖掘原理&#xff0c;分析各种优势和劣势&#xff0c;适配各种应用场景&#xff0c;部分内容还列出了代码示例&#xff0c;以清晰地讲述原理。在这里&#xff0c;你将全面了解 Vue2 和…

B端系统:故障页面设计,告知用户接下来怎么办?

Hi&#xff0c;大家好&#xff0c;我是贝格前端工场&#xff0c;从事8年前端开发的老司机。很多B端系统体验不好很大一部分原因在于设计不合理&#xff0c;让用户无所适从&#xff0c;大大降低了操作体验&#xff0c;本文着重分析B端系统的故障页面如何设计&#xff0c;欢迎老铁…

基于springboot实现二次元商品购物系统项目【项目源码+论文说明】

基于springboot实现二次元商品购物系统演示 摘要 时代的变化速度实在超出人类的所料&#xff0c;21世纪&#xff0c;计算机已经发展到各行各业&#xff0c;各个地区&#xff0c;它的载体媒介-计算机&#xff0c;大众称之为的电脑&#xff0c;是一种特高速的科学仪器&#xff0…

Vue 组件和插件:探索细节与差异

查看本专栏目录 关于作者 还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#x…

java面试(网络)

TCP和UDP有什么区别&#xff1f;TCP三次握手不是两次&#xff1f; TCP&#xff1a;面向连接&#xff0c;可靠的&#xff0c;传输层通信协议。点对点&#xff0c;占用资源多&#xff0c;效率低。 UDP&#xff1a;无连接&#xff0c;不可靠&#xff0c;传输层通信协议。广播&…