string_algo是用于处理字符串查找,替换,转换等一系列的字符串算法

前缀i:表示大小写不敏感

后缀_copy:表示不变动输入,返回处理结果的拷贝

后缀_if:表示算法需要一个判断式的谓词函数对象。

#include <iostream>
#include <vector>
#include <string>
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost; int main()
{
string str("readme.txt");
if (ends_with(str,"txt"))//判断后缀
{
cout << to_upper_copy(str) + " UPPER" <<endl;//大写
}
replace_first(str,"readme","followme");//替换
cout << str <<endl;
vector<char> v(str.begin(),str.end());
vector<char> v2 = to_upper_copy(erase_first_copy(v,"txt"));
for (int i = 0;i < v2.size();++i)
{
cout << v2[i];
}
return 0;
}

1.大小写转换,如上。

2.判断式

2.1判断式(算法),用于子串的匹配

starts_with

ends_with

contains

equals

lexicographcical_compare

#include <iostream>
#include <vector>
#include <string>
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost; int main()
{
string str("Power Bomb");
if (iends_with(str,"bomb"))
{
cout << "success iends_with" <<endl;
}
if (ends_with(str,"bomb"))
{
cout << "success ends_with" <<endl;
}
if (contains(str,"er"))
{
cout << "success contains" <<endl;
} return 0;
}

2.2.判断式(函数对象)用于字符串之间的比较

#include <iostream>
#include <vector>
#include <string>
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost; int main()
{
string str1("Samus");
string str2("samus");
if (is_equal()(str1,str2))
{
cout << "is equal" <<endl;
}
if (is_less()(str1,str2))
{
cout << "is less" <<endl;
} return 0;
}

2.3.分类(返回函数对象)用于分类

is_space判断字符是否为空格

is_alnum判断是否为字符或者数字

3.修剪

trim_left,trim_right,trim删除左右两端的空格,使用谓词判断if

#include <iostream>
#include <vector>
#include <string>
#include <boost/format.hpp>
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost; int main()
{
format fmt("%s\n");
string str = " samus aran";
cout << fmt % trim_copy(str);
cout << fmt % trim_left_copy(str);
trim_right(str);
cout << fmt % str; string str2 = "2013 Happy lin Year!";
cout << fmt % trim_left_copy_if(str2,is_digit());
cout << fmt % trim_right_copy_if(str2,is_punct()); return 0;
}

4. 查找

find_first 查找字符串第一次出现的位置

find_last 查找字符串最后一次出现的位置

#include <iostream>
#include <vector>
#include <string>
#include <boost/format.hpp>
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost; int main()
{
format fmt("%s\n.pos=%d\n");
string str = "Long long ago,there was a king.";
iterator_range<string::iterator> rge;
rge = find_first(str,"long");
cout << fmt % rge % (rge.begin()-str.begin()); return 0;
}

5.替换和删除与查找类似

#include <iostream>
#include <vector>
#include <string>
#include <boost/format.hpp>
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost; int main()
{
string str = "Samus beat the monster.\n";
cout << replace_first_copy(str,"Samus","samus");
replace_first(str,"beat","kill");
cout <<str; return 0;
}

6.分割

#include <iostream>
#include <vector>
#include <string>
#include <deque>
#include <list>
#include <boost/format.hpp>
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost; int main()
{
string str = "Smaus,Link.Zelda::Mario_Luigi+zelda";
deque<string> d;
ifind_all(d,str,"zELDA");
if (d.size())
{
cout << "split right" <<endl;
}
list<string> l;
split(l,str,is_any_of(",.:_+"));
for (list<string>::iterator it = l.begin();it != l.end();++it)
{
cout << *it <<endl;
} return 0;
}

7.合并

#include <iostream>
#include <vector>
#include <string> #include <boost/assign.hpp>
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost;
using namespace boost::assign; int main()
{
vector<string> v = list_of("liuwei")("linlin")("ceshi");
cout << join(v,"+")<<endl;
struct is_contains_i
{
bool operator()(const string &x)
{
return contains(x,"i");
}
};
cout << join_if(v,"****",is_contains_i());
return 0;
}

boost之string_algo的更多相关文章

  1. 【Boost】boost::string_algo详解2——find相关函数

    来自: https://blog.csdn.net/huang_xw/article/details/8276123 函数声明:   template<typename Range1T, typ ...

  2. (三)Boost库之字符串处理

    (三)Boost库之字符串处理 字符串处理一直是c/c++的弱项,string_algo库很好的弥补了这一点. string_algo 库算法命名规则: 前缀i    : 有这个前缀表名算法的大小写不 ...

  3. Boost程序库完全开发指南——深入C++“准”标准库(第3版)

    内容简介  · · · · · · Boost 是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉. Boost 由C++标准委员会部分成员所设立的Bo ...

  4. boost学习目录

    Boost之数值转换lexical_cast https://www.cnblogs.com/TianFang/archive/2013/02/05/2892506.html Boost之字符串算法s ...

  5. Boost 常用的库

    boost是一系列C++模板库组成的免费,可移植,开源的程序库.网络上关于boost的文章已经很多.     这里摘记一些库的信息,供自己日后参考. 0.foreach - BOOST_FOREACH ...

  6. boost::bind 学习

    最近学习了太多与MacOS与Iphone相关的东西,因为不会有太多人有兴趣,学习的平台又是MacOS,不太喜欢MacOS下的输入法,所以写下来的东西少了很多.    等我学习的东西慢慢的与平台无关的时 ...

  7. boost - 正则表达式xpressive

     正则表达式是一套处理文本强有力的工具: 它使用一套复杂的语法规则,可以解决文本处理领域的绝大多数问题; 而这些问题通常是字符串算法很难甚至无法解决的. C++98标准中没有内置的正则表达式支持,使得 ...

  8. boost开发指南

    C++确实很复杂,神一样的0x不知道能否使C++变得纯粹和干爽? boost很复杂,感觉某些地方有过度设计和太过于就事论事的嫌疑,对实际开发工作的考虑太过于理想化.学习boost本身就是一个复杂度,有 ...

  9. Boost总结汇总

    从开始接触Boost已经有好几年了,而对它的掌握却难言熟悉,有对它部分的源代码的剖析也是蜻蜓点水.有时间一点点梳理一下吧. 1. 概述 [Boost]C++ Boost库简介[Boost]C++ Bo ...

随机推荐

  1. 【Android】 给我一个Path,还你一个酷炫动画

    本篇文章已授权微信公众号 hongyangAndroid (鸿洋)独家公布 转载请标明出处: http://blog.csdn.net/zxt0601/article/details/53040506 ...

  2. mac os x 使用scp取代sz rz

    在windows下,能够通过secureCRT的sz来下载文件,而用rz来上传文件.在unix/linux下则不必.由于scp命令能够完毕这项目工作. sz file替代方案为:scp usernam ...

  3. Atitit.数据库分区的设计 attilax  总结

    Atitit.数据库分区的设计 attilax  总结 1. 分区就是分门别类的文件夹 (what)1 2. 分区的好处(y)1 3. 分区原则(要不要分区,何时分区)how2 4. 主要的分表类型有 ...

  4. SGDMA-----Scatter-gather DMA

    Scatter-gather DMA 使用一个链表描述物理上不连续的存储空间,然后把链表首地址告诉DMA master.DMA master在传输完一块物理连续的数据后,不用发起中断,而是根据链表来传 ...

  5. C++语言基础(5)-this和static关键字

    一.this关键字 this是一个指针,可用其访问成员变量或成员函数 下面是使用this的一个完整示例: #include <iostream> using namespace std; ...

  6. netty的理解

    netty作为nio应用的典范,在很多设计方面都值得我们在程序开发中学习. 1.事件驱动,三种事件的传播机制.一种是在channel上触发,一种是在pipeline上触发,一种是在context上触发 ...

  7. iOS wkWebView点击链接无反应

    在使用wkWebView的时候发现用webView加载youku.com,里面的视频链接点击是可以跳转的,但是呢,加载v.qq.com的时候发现链接点击又没有效果,折腾了很久最后找到解决方案 实现WK ...

  8. Centos 7 启动错误:XFS_WANT_CORRUPTED_GOTO 修复

    参考源 如果出现以下报错 [sda] Assuming drive cache: write through Internal error xfs XFS_WANT_CORRUPTED_GOTO at ...

  9. Java正则表达式之Matcher类的find和matches方法的区别

    讨论整个问题之前,先看个例子:   从上面的例子可以看出 matches()是整个字符串完全匹配时,才会返回true 而find()则只需要字符串中,找到某部分的子字符串匹配则返回true       ...

  10. sz与rz

    yum安装root 账号登陆后执行以下命令:yum install -y lrzsz使用说明sz命令发送文件到本地:# sz filenamerz命令本地上传文件到服务器:# rz https://w ...