string 拆分字符串

来源:互联网 发布:制作二维码的软件 编辑:程序博客网 时间:2024/04/29 07:56

以下C++实现一个将字符串拆分以后,存放到一个string当中的代码,使用的时候传入三个参数即可,非常好用:

#ifndef FUNCTIONS_H
#define FUNCTIONS_H
  
#include <iostream>
#include <string>
#include <algorithm>     
#include <functional>
usingnamespace std;
#include <vector>
  
  
inlinestring&  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里面
voidsplitStr(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(inti=0; i!=vec.size(); ++i)
    {
      cout<<"#"<<vec[i]<<"#"<<endl;
    }
    cout<<endl;
}
 
引用:http://www.crazyant.net/2012/05/19/c%E6%8B%86%E5%88%86%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%BB%A3%E7%A0%81%EF%BC%88%E5%AE%9E%E7%8E%B0split%EF%BC%89/
原创粉丝点击