C++又一个字符串分割算法
程序员文章站
2022-04-27 19:15:14
C++又一个字符串分割算法:字符串分割的算法,有很多种方式,但是下面这种方式并不是很常见。
strutility.hpp内容如下:
#pragma once
#inclu...
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++实现QM算法