实现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功能实现c++的string的split功能


上一篇:SQL float 保留两位小数


下一篇:Liunx网络技术管理及进程管理