以下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
本函数可以用以下示例调用:
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; }