如果要将类似“aa ss ff”的字符串按空格分割成一个个字符,Java、C#、PHP或者python等其它语言写多的人,就会认为split一个理应存在的方法, 实际上C++中并没有这个方法,需要我们自己去写。毕竟,C++是一个用字符串,都要引用string头文件的语言!
下面提供一个自己写的C++的Split函数:
vector<string> split(string str,string separator){
vector<string> result;
int cutAt;
while((cutAt = str.find_first_of(separator))!=str.npos){
if(cutAt>0){
result.push_back(str.substr(0,cutAt));
}
str=str.substr(cutAt+1);
}
if(str.length()>0){
result.push_back(str);
}
return result;
}
这个函数利用到一个名为result,C++的vector,具体见《【C++】容器类》( 点击打开链接),也就是动态数据来存储字符串被分割之后的一个个部分。
这个函数的具体思想如下:
在传入的字符串str,一次又一次地寻找在这个字符串str中的separator位置,然后在这个位置一次次进行自带的substring方法切割,没切割一次就将这部分存入result中,同时再对余下部分做重复的动作,从而实现Split的功能。具体用法如下:
#include "iostream"
#include "vector"
#include "string"//纯粹为了c++用cout输出string的时候,不报错。
using namespace std;
//打印容器vector
void printVector(vector<string> vector1){
for(int i=0;i<int(vector1.size());i++){
cout<<vector1[i]<<endl;
}
}
//split函数
vector<string> split(string str,string separator){
vector<string> result;
int cutAt;
while((cutAt = str.find_first_of(separator))!=str.npos){
if(cutAt>0){
result.push_back(str.substr(0,cutAt));
}
str=str.substr(cutAt+1);
}
if(str.length()>0){
result.push_back(str);
}
return result;
}
//用了两个字符串与两个不同的分隔符测试
int main(){
string s="aaa ass sddd www rr";
vector<string> ret;
ret=split(s," ");
printVector(ret);
cout<<endl;
s="as,sqw,wqe,tr,q";
ret=split(s,",");
printVector(ret);
return 0;
}
运行结果如下图所示: