http://www.boost.org/doc/libs/1_46_1/doc/html/string_algo.html

这个库是个 headers only library  这个库提供了STL没有提供的 string-related算法,  但是实现做到了可以用在任何 character 的 container上

split

在写在线状态的改造时候要把一个字符串中描述的几种类型拆出来, 引发了这个问题, 去标准库里找了也没找到, 后来在boost库中找到了string_algo这个库,   以下是我写的一个使用split的例子

 1 #include <boost/algorithm/string.hpp>
 2 #include <iostream>
 3 #include <string>
 4 #include <vector>
 5 using namespace boost::algorithm;
 6 using namespace std;
 7 int main(){
 8     string str("miss,you.just.call_to,say,I~love~you");
 9     vector<string> strVec;
10     split(strVec, str, is_any_of(",."));
11     vector<string>::iterator it = strVec.begin();
12     for (; it!=strVec.end(); it++){
13         cout << *it << endl;
14     }
15     return 0;
16 }

运行的结果就是都拆出来了  miss you  just  call to  say   I~love~you,  注意分隔符是,.  没有用~,  所有后面的I~love~you没有拆

头文件统一的话就用的#include<boost/algorithm/string.hpp>    9, 10行就是split的使用方式

2.  我们用的头文件是 boost/algorithm/string.hpp,   这个头文件只用来包括其他具体的头文件, 在 algorithm/string目录下如 split的就是   boost/algorithm/string/split.hpp,   里面定义了几个函数模板, 应该说这里面全是函数模板,  另外还可以看到, 这就是headers only library

trim

在写群聊中有遇到去掉一个string当中的空格,std中没有这样的算法,在boost::string_algo中找到了trim, 但它只能去除头尾,这个也很有用, 头文件是  <boost/algorithm/string/trim.hpp> 或<boost/algorithm/string.hpp>, 写了一些trim的测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <boost/algorithm/string.hpp>
 #include <iostream>
 #include <string>
  
 using namespace boost::algorithm;
 using namespace std;
  
 int main(){
     string str = "     abc     ...     ";
     cout << "before trim str = " << str << endl;
     trim(str);
     cout << "after trim  str = " << str << endl;
  
     string strOrigin = "12324342231436576abc0cba43455465767678878";
     str = strOrigin;
     cout << "before trim str = " << str << endl;
     trim_if(str, is_any_of("1234567890"));
     cout << "after trim  str = " << str << endl;
     string str2 = trim_copy_if(strOrigin, is_any_of("1234567890"));
     cout << "after trim  str2 = " << str2 << endl;
     string str3 = trim_left_copy_if(strOrigin, is_any_of("1234567890"));
     cout << "after trim  str3 = " << str3 << endl;
     string str4 = trim_right_copy_if(strOrigin, is_any_of("1234567890"));
     cout << "after trim  str4 = " << str4 << endl;
     trim_left_if(strOrigin, is_any_of("1234567890"));
     cout << "after tim_left , strOrigin = " << strOrigin << endl;
     trim_right_if(strOrigin, is_any_of("1234567890"));
     cout << "after tim_right, strOrigin = " << strOrigin << endl;
     return 0;
 }

注意trim是一系列的函数,有最普通的默认去空格的trim, 也有指定去什么的trim_if, trim_left_if, 这是直接在参数指定的string上操作,也有把结果单独生成一个string的trim_copy_if, trim_left_copy_if

boost库在unix下的安装文档, http://www.boost.org/doc/libs/1_52_0/more/getting_started/unix-variants.html, 只需要简单的执行脚本就行了,会编译链接生成相应的库,且用头文件拷到相关的目录, 我自己在运行那个./bootrap脚本的时候开始老不成功,后来 google了一下是因为其要运行的 tools/..../build.sh没有 chmod +x

分隔和截断字符串, boost string algorithm library中的split和trim相关推荐

  1. 【C++ 语言】C++字符串 ( string 类 | 创建方法 | 控制台输出 | 字符串操作 | 栈内存字符串对象 | string* )

    文章目录 C++ 字符串 对象 C++ 字符串 对象 创建方法 C++ 字符串 对象 输出到控制台 C++ 字符串 拼接 C++ 字符串 方法调用 ( 栈内存对象 ) C++ 字符串 方法调用 ( 堆 ...

  2. C语言函数 snprintf()(发送有限字符截断字符串输出到 str 所指向的字符串)(字符串拼接、截断拼接)

    相似函数: C语言sprintf函数(发送格式化输出到 str 所指向的字符串)(format 标签属性)(字符串拼接) 文章目录 描述 声明 参数 返回值 实例 C 标准库 - <stdio. ...

  3. java插入数据库字段过长_数据库插入数据长度过大,出现提示:将截断字符串或二进制数据...

    异常代码: org.hibernate.exception.GenericJDBCException: could not insert: [com.huama.equma.entity.DicPac ...

  4. 【javascript高级教程】JavaScript 字符串(String) 对象

    String 对象用于处理已有的字符块. JavaScript 字符串 一个字符串用于存储一系列字符就像 "John Doe". 一个字符串可以使用单引号或双引号: var car ...

  5. 字符串 charat_Java | String.charAt(index)| 从字符串中按索引获取字符

    字符串 charat String.charAt() function is a library function of String class, it is used to get/retriev ...

  6. 字符串之String类

    主要涉及在程序运行初始化之后不能改变的字符串类String和字符串内容可以动态改变的类StringBuffer,以及用于字符串转换词法分析类StringTokenizer:同时还将介绍字符串和其他数据 ...

  7. 【Java 基础】字符串(String、StringBuilder),日期(Date、SimpleDateFormat、Calendar)

    字符串.日期 字符串(String) 字符串常量池(String Constant Pool) 字符串的初始化 intern 方法 字符串的常用方法(截取) 可变字符串(StringBuilder) ...

  8. sql server的缺陷 将截断字符串或二进制数据 哪个字段

    将截断字符串或二进制数据 哪个字段 消息 8152,级别 16,状态 14,第 2 行 将截断字符串或二进制数据. sql server2000 sql server2014 也不能直接提示出哪个字段 ...

  9. B1019/A1069 数字黑洞 借用string, algorithm快速完成

    通过大量库函数快速完成此题. 比如 sort对字符串排序 string.length()来对不足4位的数字补0 to_string()将string快速转为int (还有个astox函数可以实现str ...

最新文章

  1. Alexa偷录私密对话并发送,继诡笑之后出现又一神举动
  2. java测试不成功_为什么我的Java布尔测试总是失败?
  3. 清理和删除svn信息
  4. Linux学习:文件描述符表
  5. 【用学校抄作业带你走进可持久化线段树(主席树)】可持久化线段树概念+全套模板+例题入门:[福利]可持久化线段树)
  6. hive的metatable学习
  7. python中and和or的惰性求值特点_python中的惰性求值
  8. php报表开发韩顺平,韩顺平从Html基础到php实战开发视频教程非常全面的一套PHP开发教程...
  9. python中options类_python命令行参数解析OptionParser类用法实例
  10. 不引入外部文件也可以显示图片
  11. 定义函数,实现折半查找算法
  12. NAOMI: Non-Autoregressive MultiresolutionSequence Imputation(非自回归多分辨率序列填补)论文详解
  13. (附源码)springboot实验室预约管理系统 毕业设计 261141
  14. 应用程序正常初始化(0xc0150002)失败的终极解决方案
  15. 目前最经典有效的“阅读方法”——SQ3R阅读法
  16. 少说话多写代码之Python学习008——字符串的方法02
  17. 构建SpringBoot应用Docker镜像
  18. OrgChart-简单实用的组织结构图表jQuery插件
  19. 丢失msvcp100.dll
  20. Clair介绍和源码分析

热门文章

  1. python中可迭代对象拆包时、怎么赋值给占位符_python3-数据结构和算法 » 1.2 解压可迭代对象赋值给多个变量...
  2. python决策树算法_决策树算法及python实现
  3. 易语言 网页用什么编码_通常提到的编码器是干什么用的
  4. 什么是命名空间 为什么C++需要使用命名空间
  5. 光纤收发器的AB端可随便连接吗?
  6. 国内外知名工业交换机品牌有哪些?
  7. matlab 球坐标绘图,MATLAB绘制地图
  8. android 检测过程,Android 系统对permision的检测过程
  9. select * from where 三个条件_VBA学习笔记70: Select语句基础
  10. C语言实用算法系列之学生管理系统_单向链表外排序_栈内数组存储链表节点指针