C++拆分字符串代码(实现split)

以下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;
    }

 

相关推荐

Leave a Comment