设为首页 加入收藏

TOP

C++又一个字符串分割算法
2017-01-15 08:15:03 】 浏览:440
Tags:一个 字符串 分割 算法

C++又一个字符串分割算法:字符串分割的算法,有很多种方式,但是下面这种方式并不是很常见。

strutility.hpp内容如下:

#pragma once
#include 
  
   //not1、ptr_fun
#include 
   
    //find_if #include 
    
      #include 
     
       inline std::string& lTrim(std::string &ss) { std::string::iterator p = find_if(ss.begin(), ss.end(), std::not1(std::ptr_fun(isspace))); ss.erase(ss.begin(), p); return ss; } inline std::string& rTrim(std::string &ss) { std::string::reverse_iterator p = find_if(ss.rbegin(), ss.rend(), std::not1(std::ptr_fun(isspace))); ss.erase(p.base(), ss.end()); return ss; } inline std::string& trim(std::string &st) { lTrim(rTrim(st)); return st; } //将一个以par分割的整个字符串,分割以后存到vec里面 std::vector
      
        split_string(std::string str, std::string par) { std::vector
       
         vec; vec.clear(); std::string::size_type pos=0, prev_pos=0;//查找到的位置和前一个位置 //处理并没有分割符的情况 if(str.find(par,0) == std::string::npos) { if(!trim(str).empty()) vec.push_back(trim(str)); return vec; } std::string strtmp; for( pos=str.find(par,0); pos!=std::string::npos; prev_pos=pos+par.size(), pos=str.find(par,pos+par.size()) ) { strtmp = str.substr(prev_pos, pos-prev_pos); if(!trim(strtmp).empty()) vec.push_back(strtmp); } strtmp = str.substr(prev_pos, pos-prev_pos); if(!trim(strtmp).empty()) vec.push_back(strtmp); return vec; }
       
      
     
    
   
  

测试代码:
#include 
  
   //cout、endl
#include 
   
    //stringstream #include 
    
      #include "strutility.hpp" int main() { std::string str = "ABC|123|DEF|456"; std::cout << "分割前字符串: " << str << std::endl; std::stringstream ss; std::vector
     
       vec = split_string(str, "|"); for(int i=0; i!=vec.size(); ++i) { if (i != vec.size()-1) { ss << vec[i] << "、"; } else { ss << vec[i] << "。"; } } std::string strsub = ss.str(); std::cout << "分割后的子串 : " << strsub << "\r\n" <
       
      
     
    
   
  
输出结果:

ABC、123、DEF、456

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++输入输出十六进制 八进制数 下一篇C++把输出结果写入到文件中

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目