以下C++实现一个将字符串拆分以后,存放到一个string当中的代码,使用的时候传入三个参数即可,非常好用:
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
using namespace std;
#include <vector>
inline string& lTrim(string &ss)
{
string::iterator p=find_if(ss.begin(),ss.end(),not1(ptr_fun(isspace)));
ss.erase(ss.begin(),p);
return ss;
}
inline string& rTrim(string &ss)
{
string::reverse_iterator p=find_if(ss.rbegin(),ss.rend(),not1(ptr_fun(isspace)));
ss.erase(p.base(),ss.end());
return ss;
}
inline string& trim(string &st)
{
lTrim(rTrim(st));
return st;
}
//将一个以par分割的整个字符串,分割以后存到vec里面
void splitStr(vector<string> &vec, string str, string par){
string::size_type pos=0,previousPos=0;//查找到的位置和前一个位置
//处理并没有分割符的情况
if(str.find(par,0)==string::npos){
if(!trim(str).empty()) vec.push_back(trim(str));
return;
}
string strtmp;
for( pos=str.find(par,0); pos!=string::npos; previousPos=pos+par.size(), pos=str.find(par,pos+par.size()) ){
strtmp = str.substr(previousPos,pos-previousPos);
if(!trim(strtmp).empty()) vec.push_back(strtmp);
}
strtmp = str.substr(previousPos,pos-previousPos);
if(!trim(strtmp).empty()) vec.push_back(strtmp);
}
#endif
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #ifndef FUNCTIONS_H #define FUNCTIONS_H #include <iostream> #include <string> #include <algorithm> #include <functional> using namespace std; #include <vector> inline string& lTrim(string &ss) { string::iterator p=find_if(ss.begin(),ss.end(),not1(ptr_fun(isspace))); ss.erase(ss.begin(),p); return ss; } inline string& rTrim(string &ss) { string::reverse_iterator p=find_if(ss.rbegin(),ss.rend(),not1(ptr_fun(isspace))); ss.erase(p.base(),ss.end()); return ss; } inline string& trim(string &st) { lTrim(rTrim(st)); return st; } //将一个以par分割的整个字符串,分割以后存到vec里面 void splitStr(vector<string> &vec, string str, string par){ string::size_type pos=0,previousPos=0;//查找到的位置和前一个位置 //处理并没有分割符的情况 if(str.find(par,0)==string::npos){ if(!trim(str).empty()) vec.push_back(trim(str)); return; } string strtmp; for( pos=str.find(par,0); pos!=string::npos; previousPos=pos+par.size(), pos=str.find(par,pos+par.size()) ){ strtmp = str.substr(previousPos,pos-previousPos); if(!trim(strtmp).empty()) vec.push_back(strtmp); } strtmp = str.substr(previousPos,pos-previousPos); if(!trim(strtmp).empty()) vec.push_back(strtmp); } #endif |
本函数可以用以下示例调用:
void main()
vector<string> vec;
splitStr(vec, "C$D$E$F$G","$");
cout<<"分割前的字符串:"<<str<<endl;
cout<<"分割后的子串:"<<endl;
for(int i=0; i!=vec.size(); ++i){
cout<<"#"<<vec[i]<<"#"<<endl;
}
cout<<endl;
}
1 2 3 4 5 6 7 8 9 10 | void main() vector<string> vec; splitStr(vec, "C$D$E$F$G","$"); cout<<"分割前的字符串:"<<str<<endl; cout<<"分割后的子串:"<<endl; for(int i=0; i!=vec.size(); ++i){ cout<<"#"<<vec[i]<<"#"<<endl; } cout<<endl; } |