今天写程序,遇到了一个要实现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功能的更多相关文章

  1. String类常用功能

    String类常用功能 判断: boolean equals(Object obj) boolean equalsIgnoreCase(String str) //忽略大小写 boolean star ...

  2. Java基础知识强化35:String类之String的其他功能

    1. String类的其他功能: (1)替换功能: String replace(char old, char new) String replace(String old,String new) ( ...

  3. sql server 实现split功能 行转列

    --實現split功能的函數create function [dbo].[func_split]( @SourceSql varchar(max), @StrSeprate varchar(10))r ...

  4. C语言的split功能

    其它高级语言都有字符串的split功能,但C没有系统自带的,只能自己写一个了. void c_split(char *src, const char *separator, int maxlen, c ...

  5. String的split方法,你真的懂吗

    String的split方法相信大家都不陌生,或多或少都用过它将字符串转成一个数组,但是就是这样一个简单的方法,里面也有一个不得不注意.不深不浅的小坑. 本地测试代码如下图所示: 图1 大家会发现sp ...

  6. String的split方法支持正则表达式

    String的split方法支持正则表达式: 1. 正则表达式\s表示匹配任何空白字符 2. +表示匹配一次或多次

  7. String的split()方法探索和大揭秘

    事实上没打算写这么一篇博文的,可是昨天在逛论坛的时候,发现一帖子,然后我又把帖子的内容在群里发了一通,结果出现了让人吃惊的结果,所以这里简单的给大家分享一下split()方法,免得大伙儿以后还会出现这 ...

  8. BUGFIX 09 - 记一次Java中String的split正则表达式匹配 - 引发`OutOfMemoryError: Java heap space`的oom异常 排查及解决 -Java根据指定分隔符分割字符串,忽略在引号里面的分隔符

    问题简述 说白了,Java根据指定分隔符分割字符串,忽略在引号(单引号和双引号)里面的分隔符; oom压测的时候,正则匹配"(?=(?:[^\"]*\"[^\" ...

  9. String.Split()功能

    我们在过去的教训 String.Join功能(http://blog.csdn.net/zhvsby/archive/2008/11/28/3404704.aspx).当中用到了String.SPli ...

随机推荐

  1. 使用JS制作一个鼠标可拖的DIV(四)——缩放

    原理与鼠标拖动 DIV 相同. 下面就先实现一个在DIV的右上角显示一个小正方形(类似). 当鼠标按下并拖动时,DIV会以要拖动的元素的左下角的坐标点定位,根据鼠标的拖动,按比例的扩大或缩小. 一.思 ...

  2. jQuery之父:每天都写点代码

    去年秋天,我的“兼职编程项目”遇到了一些问题:要不是从 Khan Academy 的项目里挪出时间来的话,我根本没办法将不理想的进度弥补上. 这些项目遇到了一些严重的问题.之前的工作我主要是在周末,有 ...

  3. Android进阶笔记10:Android 万能适配器

    1. Android 万能适配器      项目中Listview GridView几乎是必用的组件,Android也提供一套机制,为这些控件绑定数据,那就是Adapter.用起来虽然还不错,但每次都 ...

  4. SQLServer-镜像配置

    实验环境:三台服务器分别为主服务器,镜像服务器,见证服务器,都加入域sql.com 1. 分别在三台服务器上安装SQL 2008 R2,安装数据库引擎和管理工具两个组件即可. 2. 镜像前准备工作. ...

  5. [改善Java代码]不要让类型默默转换

    建议23:不要让类型默默转换 public class Client { // 光速是30万公里/秒,常量 public static final int LIGHT_SPEED = 30 * 100 ...

  6. hdu 4000 树状数组

    思路:找出所有 a<b<c||a<c<b的情况,在找出所有的a<b<c的情况.他们相减剩下就是a<c<b的情况了. #include<iostre ...

  7. hdu 4571 floyd+动态规划

    思路: 我们先求一遍floyd,将各点的最短距离求出,然后将点按si的升序排序.dp[i][k]表示第i个点在第j时间所获得的最大效益,那么 dp[i][k]=max(dp[ i ][ k ]  , ...

  8. hiho拓扑排序专题 ——第四十八、四十七周

    拓扑排序·一 分析: 此题就是求一个有向图中是否存在环. 如存在环则输出"Wrong", 若不存在环, 说明课程安排的合理,输出"Correct". 题中的提示 ...

  9. ios Swift 特性

    特性提供了关于声明和类型的更多信息.在Swift中有两类特性,用于修饰声明的以及用于修饰类型的.例如,required特性,当应用于一个类的指定或便利初始化器声明时,表明它的每个子类都必须实现那个初始 ...

  10. linux umount 提示device is busy 的解决

    linux umount 提示"device is busy" 终极解决 为了干净地关闭或热交换 UNIX 或类 UNIX 系统上的存储硬件,必须能够卸载使用此设备上的存储的所有文件系统.但是,如果正 ...