在python,c#等语言中,string都是默认提供split这个函数的,C++里面却没有默认实现,但又经常会用到,所以就简单实现了一个:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
int SplitString(const string &srcStr,const string &splitStr,vector<string> &destVec)
{
if(srcStr.size()==0)
{
return 0;
}
size_t oldPos,newPos;
oldPos=0;
newPos=0;
string tempData;
while(1)
{
newPos=srcStr.find(splitStr,oldPos);
if(newPos!=string::npos)
{
tempData = srcStr.substr(oldPos,newPos-oldPos);
destVec.push_back(tempData);
oldPos=newPos+splitStr.size();
}
else if(oldPos<=srcStr.size())
{
tempData= srcStr.substr(oldPos);
destVec.push_back(tempData);
break;
}
else
{
break;
}
}
return 0;
}
|
简单使用代码如下:
1
2
3
4
5
6
7
8
9
|
string src = ",,w,,ai,,,nio,,";
string splitStr = ",,";
vector<string> destVec;
SplitString(src,splitStr,destVec);
for(vector<string>::iterator it = destVec.begin();it!=destVec.end();++it)
{
cout<<*it<<endl;
}
|
输出为:
当然,一般split我们还是使用字符分割比较多。
另外也说一个问题,stl里面string的find和rfind方法是可以查找字符串的,但是find_last_of和find_first_of只能查找字符,即使传入的参数是字符串,查找的也是字符。