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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Spring Integration重试RabbitMQ

我最近阅读了有关使用RabbitMQ重试的方法 在这里&#xff0c;并想尝试类似的方法 Spring Integration &#xff0c;提供了一组很棒的集成抽象。 TL; DR解决的问题是重试一次消息&#xff08;在处理失败的情况下&#xff09;&#xff0c;两次重试之间有较大的延迟&#xff08…

Vue_(Router路由)-vue-router路由的基本用法

vue-router官网&#xff1a;传送门 vue-router起步&#xff1a;传送门 vue-router路由&#xff1a;Vue.js官网推出的路由管理器&#xff0c;方便的构建单页应用 单页应用&#xff1a;Single Page Application简称SPA&#xff0c;只有一个web页面的应用&#xff0c;用户与应用交…

利用boost做string到wstring转换,以及字符集转换

#include <boost/locale.hpp> int _tmain(int argc, _TCHAR* argv[]) {//std::locale::global(std::locale("utf-8"));std::locale::global(std::locale("")); // 设置全局的C运行库locale 可以针对cout fstream等单独设置 空表示默认使用当前系统…

P4198 楼房重建

[Luogu4198] 原题解 19.3.21 用线段树维护有关单调栈的问题 不要pushdown , 但是pushup的时候需要特别注意. 19.3.31 这里的\(pushup2\)其实就是几个特判 : 没有 , 直接返回当前区间答案 , 区间长度为\(1\) , 以及剩下两大类 , 这里有一个模板 : if(mx[ls]<tmp) return push…

Linux多线程实践(1) --线程理论

线程概念 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序列/指令序列”; 一切进程至少有一个执行线程; 进程 VS. 线程 1.进程是资源分配(进程需要参与资源的竞争)的基本单位,而线程是处理器调…

蓝桥杯 密文搜索(全排列)

题目描述福尔摩斯从X星收到一份资料&#xff0c;全部是小写字母组成。他的助手提供了另一份资料&#xff1a;许多长度为8的密码列表。福尔摩斯发现&#xff0c;这些密码是被打乱后隐藏在先前那份资料中的。请你编写一个程序&#xff0c;从第一份资料中搜索可能隐藏密码的位置。…

openshift_为Openshift + MongoDb应用程序编写验收测试

openshift验收测试用于确定是否满足规范要求。 它应在与生产环境尽可能相似的环境中运行。 因此&#xff0c;如果您的应用程序已部署到Openshift中&#xff0c;则您将需要一个与生产环境中使用的帐户平行的帐户&#xff0c;以运行测试。 在这篇文章中&#xff0c;我们将为部署到…

学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

跳转指令分三类:一、无条件跳转: JMP;二、根据 CX、ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转)、JECXZ(ECX 为 0 则跳转);三、根据 EFLAGS 寄存器的标志位跳转, 这个太多了.根据标志位跳转的指令: JE ;等于则跳转 JNE ;不等于则跳转JZ ;为 0 则跳转 JNZ ;不为 0 则跳转JS…

广告行业一些常用物料的尺寸

10-13 14:13 设计 /淘宝 海报 50cm 70cm &#xff08;宽 高&#xff09; 57cm 84cm &#xff08;宽 高&#xff09; 横幅 横幅尺寸高度默认为整10为单位&#xff0c;50、60、70、长度视环境而定&#xff0c;材料一般为牛津布&#xff0c;旗帜布&#xff0c;颜色有双色有彩…

Spring Security和自定义密码编码

在上一篇文章中&#xff0c;我们使用jdbc和md5密码编码将密码编码添加到了我们的spring安全配置中。 但是&#xff0c;在定制UserDetailsS​​ervices的情况下&#xff0c;我们需要对安全配置进行一些调整。 我们需要创建一个DaoAuthenticationProvider bean&#xff0c;并将…

智能变电站协议系列-2、SV/SMV协议示例(IEC61850)以及5G专网下的电力方案分析

文章目录 一、前言二、资料准备三、libiec61850的SV运行示例及抓包分析1、单独编译示例程序2、运行示例程序及5G专网场景下部署3、wireshark抓包分析 四、最后 一、前言 之前我们对IEC61850协议有了整体的了解&#xff0c;对一些概念有了一定的认识&#xff0c;并针对GOOSE协议…

php 常用的知识点归集(下)

24、静态属性与静态方法在类中的使用 需求&#xff1a;在玩CS的时候不停有伙伴加入&#xff0c;那么现在想知道共有多少人在玩&#xff0c;这个时候就可能用静态变量的方法来处理 利用原有的全局变量的方法来解决以上的问题 <?php header(content-type:text/html;charsetut…

GDB下查看内存命令(x命令)

可以使用examine命令(简写是x)来查看内存地址中的值。x命令的语法如下所示&#xff1a; x/<n/f/u> <addr> n、f、u是可选的参数。 n是一个正整数&#xff0c;表示需要显示的内存单元的个数&#xff0c;也就是说从当前地址向后显示几个内存单元的内容&#xff0c;一…

[19/03/21-星期四] 异常(Exception) (一)

一、引言 在实际工作中&#xff0c;我们遇到的情况不可能是非常完美的。比如&#xff1a;你写的某个模块&#xff0c;用户输入不一定符合你的要求;你的程序要打开某个文件&#xff0c; 这个文件可能不存在或者文件格式不对 &#xff0c;你要读取数据库的数据&#xff0c;数据可…

jax-rs jax-ws_JAX-RS Bean验证错误消息国际化

jax-rs jax-wsBean验证简介 JavaBeans验证&#xff08;Bean验证&#xff09;是Java EE 6平台的一部分提供的新验证模型。 约束通过以JavaBeans组件&#xff08;例如托管Bean&#xff09;的字段&#xff0c;方法或类上的注释形式的约束来支持Bean验证模型。 javax.validation.c…

补码和原码的转化过程

在计算机系统中&#xff0c;数值一律用补码来表示&#xff08;存储&#xff09;。 主要原因&#xff1a; 使用补码&#xff0c;可以将符号位和其它位统一处理&#xff1b;同时&#xff0c;减法也可按加法来处理。另外&#xff0c;两个用补 码表示的数相加时&#xff0c;如果最高…

Flask实现群聊

后端 from geventwebsocket.handler import WebSocketHandler from gevent.pywsgi import WSGIServer from geventwebsocket.websocket import WebSocket from flask import Flask,request,render_template user_socket_list [] app Flask(__name__)app.route("/conn_ws…

第一单元总结:基于基础语言、继承和接口的简单OOP

前情提要 到目前为止&#xff0c;OO课程已经完成了前三次的作业&#xff0c;分别为&#xff1a; 第一次作业&#xff1a;简单多项式的构造和求导。【正则表达式】【数据结构】【排序】第二次作业&#xff1a;含三角函数因子的复杂多项式的构造、求导和化简。【递归下降】【DFS】…

JUnit与TestNG:您应该选择哪种测试框架?

JUnit与TestNG&#xff1a;测试框架对决 在平衡良好的开发人员团队中&#xff0c;测试是软件发布周期中不可分割的一部分。 并非总是那样。 单元测试&#xff0c;集成测试&#xff0c;系统测试等并不总是存在的。 如今&#xff0c;我们很幸运能及时到达一个测试很重要且其价值…

小尾数,大尾数

大尾小尾 是数据在存储器中的存储格式&#xff0c;INtel采用的是小尾表示&#xff0c;即数据的高位存储在存储器的高地址&#xff0c;低位存储在存储器的低地址&#xff0c;例如一个十六进制数据0x1234存储在内存中&#xff0c;那么该数据在内存中的存储格式为&#xff1a; 34 …