实现c++的string的split功能
今天写程序,遇到了一个要实现string.split()这个的一个函数。python里面有,qt里面有,c++里面没有。照着网上抄了一个,放在这里。有需要的时候直接拽过去用,否则老是写了小例子就扔,用的时候没有,也是个麻烦事
例如 “aa*bb*cc” 会存储成vector<string> "aa" "bb" "cc"
// temp1.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <string>
#include <vector>
using namespace std; int _tmain(int argc, _TCHAR* argv[])
{
char a[] = "abc*123*xyz"; //目标是解析成 abc 123 xyz 然后存储在下面的变量 vector<string>中
string strArry = a;
vector<string> strArryList; size_t last = ;
size_t index = strArry.find_first_of("*",last); //找到last坐标后面的第一个*
while( index != std::string::npos )//找到一个推进vector一个,一直到找到了最后
{
strArryList.push_back( strArry.substr(last, index-last));
last = index +;
index = strArry.find_first_of("*",last);
}
if(index - last > ) //记得把最后一个推进去.这里是"xyz"
{
strArryList.push_back( strArry.substr(last, index-last));
} for(int i = ; i < strArryList.size(); i++)
std::cout<<strArryList[i]<<std::endl; getchar();
return ;
}
下面是又写的一个split函数的代码
#include <iostream>
#include <string>
#include <vector> using namespace std;
// spCharacter [IN] : 分隔符
// objString [IN] : 要分解的字符串
// stringVector [OUT] : 分解了的字符串
bool splitString(char spCharacter, const string& objString, vector<string>& stringVector)
{
if (objString.length() == )
{
return true;
} size_t posBegin = ;
size_t posEnd = ;
bool lastObjStore = true; while (posEnd != string::npos)
{
posBegin = posEnd;
posEnd = objString.find(spCharacter, posBegin); if (posBegin == posEnd)
{
posEnd += ;
continue;
} if (posEnd == string::npos)
{
stringVector.push_back( objString.substr(posBegin, objString.length()-posBegin) );
break;
} stringVector.push_back( objString.substr( posBegin, posEnd - posBegin) );
posEnd += ;
}
return true;
}
int main(int argc, char** argv)
{
vector<string> paths;
paths.push_back("abcde");
paths.push_back("aaar/");
paths.push_back("aaar//");
paths.push_back("aaar/bbb");
paths.push_back("aaar/c/bbb");
paths.push_back("aaar//bbb");
paths.push_back("/aar");
paths.push_back("/");
paths.push_back(""); for (auto iter = paths.begin(); iter != paths.end(); iter++)
{
vector<string> temp;
splitString('/', *iter, temp); cout<<"--------begin------"<<endl;
cout<<"the source string : ["<<*iter<<"]"<<endl;
cout<<"-------------------"<<endl;
for (auto iterSplit = temp.begin(); iterSplit != temp.end(); iterSplit++)
{
cout<<*iterSplit<<endl;
}
cout<<"--------end------"<<endl<<endl;;
} return ;
}
编译命令: g++ -o test main.cpp -std=c++11
实现c++的string的split功能的更多相关文章
- String类常用功能
String类常用功能 判断: boolean equals(Object obj) boolean equalsIgnoreCase(String str) //忽略大小写 boolean star ...
- Java基础知识强化35:String类之String的其他功能
1. String类的其他功能: (1)替换功能: String replace(char old, char new) String replace(String old,String new) ( ...
- sql server 实现split功能 行转列
--實現split功能的函數create function [dbo].[func_split]( @SourceSql varchar(max), @StrSeprate varchar(10))r ...
- C语言的split功能
其它高级语言都有字符串的split功能,但C没有系统自带的,只能自己写一个了. void c_split(char *src, const char *separator, int maxlen, c ...
- String的split方法,你真的懂吗
String的split方法相信大家都不陌生,或多或少都用过它将字符串转成一个数组,但是就是这样一个简单的方法,里面也有一个不得不注意.不深不浅的小坑. 本地测试代码如下图所示: 图1 大家会发现sp ...
- String的split方法支持正则表达式
String的split方法支持正则表达式: 1. 正则表达式\s表示匹配任何空白字符 2. +表示匹配一次或多次
- String的split()方法探索和大揭秘
事实上没打算写这么一篇博文的,可是昨天在逛论坛的时候,发现一帖子,然后我又把帖子的内容在群里发了一通,结果出现了让人吃惊的结果,所以这里简单的给大家分享一下split()方法,免得大伙儿以后还会出现这 ...
- BUGFIX 09 - 记一次Java中String的split正则表达式匹配 - 引发`OutOfMemoryError: Java heap space`的oom异常 排查及解决 -Java根据指定分隔符分割字符串,忽略在引号里面的分隔符
问题简述 说白了,Java根据指定分隔符分割字符串,忽略在引号(单引号和双引号)里面的分隔符; oom压测的时候,正则匹配"(?=(?:[^\"]*\"[^\" ...
- String.Split()功能
我们在过去的教训 String.Join功能(http://blog.csdn.net/zhvsby/archive/2008/11/28/3404704.aspx).当中用到了String.SPli ...
随机推荐
- WdatePicker时间控件联动选择
$("#txtStartTime").bind("click focus", function () { var endtimeTf = $dp.$('txtE ...
- 高德地图 JavaScript API 开发系列教程(一)
高德地图 API 提供包括 Web API 即 JavaScript API,Android API,定位API,IOS API,WP API,Win8 API等,本系列教程主要针对高德 JavaSc ...
- Emacs 安装 jedi
Jedi 是个很棒的 python 的自动补全插件,可以显示 docstring, function arguments and code location. 安装步骤: 一.安装 python 的虚 ...
- 泛型类型转为DataTable类型
public static DataTable ConvertToDatatable<T>(IEnumerable<T> data) { PropertyDescriptorC ...
- echars3.0 柱状图大小设置
{ name:'百度', type:'bar', barWidth : 10, stack: '搜索引擎', data:[620, 732, 701, 734, 1090, 1130, 1120] } ...
- android opencv 人脸检测
转载自http://blog.csdn.net/jesse__zhong/article/details/24889709 .......省略包 public class Staticdetectio ...
- Yii zii.widgets.grid 隐藏列 方便js获取隐藏值
array( 'name' => $data->is_audit, 'value' => '$data->is_audit', 'headerHtmlOptions' => ...
- Memcached学习(二)
4.协议简介 Memcached服务与各客户端间通过Tcp链接通讯(也可通过Udp链接). 各客户端间与服务间不需要发送特别的命令关闭链接,只要在不需要的时候直接关闭链接即可.建议客户端与服务间保持长 ...
- Cocos移植到Android-使用Eclipse交叉编译打包
如果对命令行望而生畏,我们可以借助于安装有ADT插件的Eclipse工具实现交叉编译.使用Eclipse进行交叉编译,首先需要将要编译的工程导入到Eclipse的Workspace中,Workspac ...
- datatable dateset 载体传递数据、存储过程
第一部分:数据库通过存储过程读取数据,通过datatable接受,前台通过asp:repeater.DataSource()和binding()绑定数据 /// <summary> /// ...