boost::algorithm(字符串算法库)

没什么说的,需要

#include<boost/algorithm/string.hpp>

1.大小写转换

    std::string s("test string");
    
    boost::to_upper(s);//转换为大写
    boost::to_lower(s);//转换为小写

    std::string str1=boost::to_lower_copy(s);//小写转换并赋值
    std::string str2=boost::to_upper_copy(s);//大写转换并赋值
    std::array<string, 3> k = {"hello", "world", "123"};
    std::cout << join(k, "-");        //输出结果为: hello-world-123

2.分割与合并字符串

    std::string s("test stringa-test stringb-test stringc");
    std::vector<std::string> sv;
    boost::split(sv,s,boost::is_any_of("-"),boost::token_compress_on);
    //Now,sv={"test stringa","test stringb","test stringc"};

3.去掉字符串两边空格

    std::string s("      test string      ");
    boost::trim_left(s);//去掉字符串左边空格
    boost::trim_right(s);//去掉字符串右边空格
    //现在s="test string"
    //boost::trim_left_copy(s)和boost::trim_right_copy(s)表示去掉后赋值

 trim_left_copy_if() 将字符串开头的符合我们提供的“谓词”的特定字符去掉,并且赋值给另一个字符串

 string str1(" hello world! ");
 string str2;
 str2 = trim_left_copy_if(str1, NotH);      // str2 == "ello world! "

总结一下就是凡是有copy就是指向后赋值,有if就判断谓词

3.谓词

    std::string s("test string");
    boost::starts_with("test");//判断字符串是否以一个字符串开始,返回bool
    std::string a("sss");
    std::string b("sss");
    boost::equal(a,b);//判断字符串是否完全匹配
    std::string s("test string");
    boost::contains("te");//判断字符串是否含有某字符串
    boost::ends_with("ing");//判断字符串是否以另一个字符串结尾;
     // boost::iends_with()同上只是不区分大小写

all()判断字符串中的所有字符是否全部满足这个谓词

    std::string s("test string");

    bool str_equal(const std::string p){
        if(boost::equal(p,"test string"))
            return true;
        return false;
    }
    boost::all(s,str_equal);

4.查找字符串

这里复制粘贴一段

find_first() 从头查找字符串中的子字符串,返回这个子串在原串中的iterator_range迭代器  Example:  char ToUpper(char &ch)  char ToUpper(char &ch)  {   if(ch <= 'z' && ch >= 'a')    return ch + 'A'-'a';   else    return ch;  }  ...  string str1("hello dolly!");  iterator_range<string::iterator> result = find_first(str1,"ll");  transform( result.begin(), result.end(), result.begin(), ToUpper ); // str1 == "heLLo dolly!" 2 ifind_first() 从头查找字符串中的子字符串,返回这个子串在原串中的iterator_range迭代器(不区分大小写)

find_last() 从尾查找字符串中的子字符串,返回这个子串在原串中的iterator_range迭代器 4 ifind_last() 从尾查找字符串中的子字符串,返回这个子串在原串中的iterator_range迭代器(不区分大小写)

find_nth() 找到第n个匹配的子串(计算从0开始)  Example:  string str1("hello dolly!");  iterator_range<string::iterator> result = find_nth(str1,"ll", 1);  transform( result.begin(), result.end(), result.begin(), ToUpper ); // str1 == "hello doLLy!" 6 ifind_nth() 找到第n个匹配的子串(计算从0开始)(不区分大小写)

find_head() 找到字符串的前n个字节  Example:  string str1("hello dolly!");  iterator_range<string::iterator> result = find_head(str1,5);  transform( result.begin(), result.end(), result.begin(), ToUpper ); // str1 == "HELLO dolly!" 8 find_tail() 找到字符串的后n个字节

find_token() 找到符合谓词的串  Example:  char Add1(const char &ch)  {   return ch+1;  }  ...  string str1("hello 1 world!");  iterator_range<string::iterator> result = find_token(str1,is_123digit);  transform( result.begin(), result.end(), result.begin(), Add1 ); // str1 == "hello 2 world!");

10 find_regex() 匹配正则表达式  Example:(等稍候了解了boost的正则表达式后再给出)

11 find() 使用自己写的查找函数  Example:  iterator_range<string::iterator>  MyFinder1( std::string::iterator begin, std::string::iterator end )  {   std::string::iterator itr;   for(itr = begin;itr!=end;itr++)   {    if((*itr) == '1')    {     std::string::iterator preitr = itr;     iterator_range<string::iterator> ret(preitr, ++itr);     return ret;    }   }   return iterator_range<string::iterator>();  } // boost自己也提供了很多Finder  ...  string str1("hello 1 world!");  iterator_range<string::iterator> result = find(str1,MyFinder1);  transform( result.begin(), result.end(), result.begin(), Add1 ); // str1 == "hello 2 world!");

5.替换/删除字符串

replace_first() 从头找到第一个匹配的字符串,将其替换为给定的另外一个字符串  Example:  string str1("hello world!");  replace_first(str1, "hello", "Hello"); // str1 = "Hello world!" 2 replace_first_copy()  从头找到第一个匹配的字符串,将其替换为给定的另外一个字符串,并且赋

值给另一个字符串  Example:  string str1("hello world!");  string str2;  str2 = replace_first_copy(str1, "hello", "Hello"); // str2 = "Hello world!" 3 ireplace_first()  从头找到第一个匹配的字符串,将其替换为给定的另外一个字符串(不区分大小写

) 4 ireplace_first_copy()  从头找到第一个匹配的字符串,将其替换为给定的另外一个字符串,并且赋

值给另一个字符串(不区分大小写) 5 erase_first()   从头找到第一个匹配的字符串,将其删除  Example:  string str1("hello world!");  erase_first(str1, "llo"); // str1 = "He world!" 6 erase_first_copy() 从头找到第一个匹配的字符串,将其删除,并且赋值给另一个字符串  Example:  string str1("hello world!");  string str2;  str2 = erase_first_copy(str1, "llo"); // str2 = "He world!" 7 ierase_first()  从头找到第一个匹配的字符串,将其删除(不区分大小写) 8 ierase_first_copy() 从头找到第一个匹配的字符串,将其删除,并且赋值给另一个字符串(不区分大

小写)

// 与上面类似,不过是从字符串尾开始替换 9 replace_last() 10 replace_last_copy() 11 ireplace_last() 12 ireplace_last_copy() 13 erase_last() 14 erase_last_copy() 15 ierase_last() 16 ierase_last_copy()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Vi的技术博客

Java基础系列(二):运算符

计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组:

16130
来自专栏老欧说安卓

Kotlin入门(16)容器的遍历方式

Kotlin号称全面兼容Java,于是乎Java的容器类仍可在Kotlin中正常使用,包括大家熟悉的队列ArrayList、映射HashMap等等。不过Kotl...

23420
来自专栏Vi的技术博客

Java基础专题(三):字符串

从概念上来讲,Java字符串就是Unicode字符序列。例如,"Java\u2122" 由5个Unicode字符J,a,v,a,和 ™。Java没有内置的字符串...

17940
来自专栏老欧说安卓

Kotlin入门(21)活动页面的跳转处理

Activity的活动页面跳转是App最常用的功能之一,在前几章的demo源码中便多次见到了,常常是点击界面上的某个按钮,然后跳转到与之对应的下一个页面。对于A...

18530
来自专栏指点的专栏

Android多线程的使用

在很多编程语言中,线程都是一个重要的组成部分,多线程的支持可以给程序员更加灵活的程序功能实现代码编写方式,线程一般用于处理一些比较耗时的任务(下载文件、复制或者...

23620
来自专栏老欧说安卓

Kotlin入门(20)几种常见的对话框

手机上的App极大地方便了人们的生活,很多业务只需用户拇指一点即可轻松办理,然而这也带来了一定的风险,因为有时候用户并非真的想这么做,只是不小心点了一下而已,如...

28730
来自专栏业余草

异常、堆内存溢出、OOM的几种情况

【情况一】:    java.lang.OutOfMemoryError: Java heap space:这种是java堆内存不够,一个原因是真不够,另一个...

36440
来自专栏Vi的技术博客

Java基础系列(五):数组

在Java中,有一种数据结构叫做数组,它用来存储同一类型的值的集合。通过一个整型下标可以访问数组中的每一个值。例如,如果a是一个整型数组,那么a[i]就是数组中...

23420
来自专栏Vi的技术博客

Spring Boot 2.0 系列(一):快速开始

Spring Boot可以使我们轻松地创建独立的、生产级的基于Spring的应用程序,由于整合了一些对Spring和第三方库的配置,我们可以快速开始一个应用程序...

14320
来自专栏Vi的技术博客

Java基础系列(四):控制流程

和其他程序设计语言一样,Java使用条件语句和循环结构确定控制流程,在介绍这些条件语句和循环结构之前,我们先来了解一下块作用域这个概念。

12640

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励