C++ 又一个字符串分割算法
2017-01-09 18:04
375 查看
字符串分割的算法,有很多种方式,但是下面这种方式并不是很常见:
strutility.hpp内容如下:
测试代码:
输出结果:
ABC、123、DEF、456。
strutility.hpp内容如下:
#pragma once #include <functional>//not1、ptr_fun #include <algorithm>//find_if #include <string> #include <vector> 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<std::string> split_string(std::string str, std::string par) { std::vector<std::string> 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 <iostream>//cout、endl #include <sstream>//stringstream #include <string> #include "strutility.hpp" int main() { std::string str = "ABC|123|DEF|456"; std::cout << "分割前字符串: " << str << std::endl; std::stringstream ss; std::vector<std::string> 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" <<std::endl; system("pause"); return 0; }
输出结果:
ABC、123、DEF、456。
相关文章推荐
- C++ 分割字符串,可以识别开头的,中间的,末尾的一个或者多个空格
- C/C++如何把一个特定分隔符分割的字符串划分为一个字符串数组,strtok(char *,char*)分割函数
- C++字符串处理的一个例子:1.查找一个字符在字符串中第n次出现的位置。2分割字符串
- C++组合应用之strtok字符串分割、数组平分算法、动态数组函数传参
- leetcode 434. Number of Segments in a String 按照空格分割字符串 + C++的stringstream的一个很好应用示范
- 小算法 - 将一个字符串分割成等长的几段
- leetcode 71. Simplify Path C++的stringstream分割字符串的一个很好地例子
- 给一个字符串,例如”ababc",要求返回"ab"。因为"ab”连续重复出现且最长。用C/C++语言写一个函数完成该算法,给出复杂度
- 一个整数转换成字符串(C/C++自己写的算法)
- 算法 - 输出一个字符串的全排列(C++)
- 算法题 用C或C++实现void reverse(char* str)函数,即反转一个null结尾的字符串
- 发现Python的源代码中关于字符串fastsearch算法的一个笔误!
- PHP - Manual手册 - 函数参考 - String 字符串处理函数 - explode使用一个字符串分割另一个字符串
- 标准C++ 与MFC 6.0 中字符串的分割
- C/C++面试之算法系列--寻找最大公共子字符串
- 一个关于c++字符串处理和delete[]与delete差别的问题
- C++派生字符串并和基类字符串连接为一个字符串
- 一个字符串里有一个字符出现次数超过1/2,求出该字符的O(n)时间,O(1)空间的算法(2008-06-30 09:58)
- C/C++面试之算法系列--以单词为最小单位翻转字符串
- C/C++面试之算法系列--从“整数转换成字符串”看算法的联想