C++又一个字符串分割算法

2017-01-14 11:23:49来源:作者:人点击

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

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台