The Boost.StringAlgorithms library provides many free-standing functions for string manipulation.

1. converting strings to uppercase

#include <boost/algorithm/string.hpp>
#include <string>
#include <iostream> using namespace boost::algorithm int main() {
std::string s = "Boost C++ Libraries";
std::cout << to_upper_copy(s) << std::endl;
return ;
}

The function boost::algorithm::to_upper_copy() converts a string to uppercase, and boost::algorithm::to_lower_copy() converts a string to lowecase. Both functions return a copy of the input string, converted to the specified case. To convert the string in place, use the functions boost::algorithm::to_upper() or boost::algorithm::to_lower().

2. Algorithms to remove characters from a string

#include <boost/algorithm/string.hpp>
#include <string>
#include <iostream> using namespace boost::algorithm int main() {
std::string s = "Boost C++ Libraries";
std::cout << erase_first_copy(s, "s") << std::endl; 删除第一个出现的s字符
std::cout << erase_nth_copy(s, "s", ) << std::endl;
std::cout << erase_last_copy(s, "s") << std::endl;
std::cout << erase_all_copy(s, "s") << std::endl;
std::cout << erase_head_copy(s, ) << std::endl; 删除从头部开始后的5个字符
std::cout << erase_tail_copy(s, ) << std::endl; 删除从尾部开始的9个字符
return ;
}

输出结果为:

Boot C++ Libraries

Boot C++ Libraries

Boost C++ Librarie

Boot C++ Librarie

C++ Libraries

Boost C++

3. Searching for substrings

#include <boost/algorithm/string.hpp>
#include <string>
#include <iostream> using namespace boost::algorithm; int main() {
std::string s = "Boost C++ Libraries";
boost::iterator_range<std::string::iterator> r = find_first(s, "C++");
std::cout << r << std::endl;
r = find_first(s, "xyz");
std::cout << r << std::endl;
return ;
}

输出为:

C++

functions such as boost::algorithm::find_first(), boost::algorithm::find_last(), boost::algorithm::find_nth(), boost::algorithm::find_heand() and boost::algorithm::find_tail(), these functions return a pair of iterators of type boost::iterator_range. Because the operator operator<< is overloaded for boost::iterator_range, the result of the individual search algorithm can be written directly to standard output.

4. Concatenatin strings with boost::algorithm::join() 连接字符串

#include <boost/algorithm/string.hpp>
#include <string>
#include <vector>
#include <iostream> using namespace boost::algorithm; int main() {
std::vector<std::string> v{"Boost", "C++", "Libraries"};
join(v, " ");
return ;
}

输出为:Boost C++ Libraries

5. replace characters in a string

functions: boost::algorithm::replace_first_copy(), boost::algorithm::replace_nth_copy(), boost::algorithm::replace_last_copy(), boost::algorithm::replace_all_copy(), boost::algorithm::replace_head_copy(), boost::algorithm::replace_tail_copy()

6. trim strings

functions: boost::algorithm::trim_left_copy(), boost::algorithm::trim_right_copy(), boost::algorithm::trim_copy() to remove spaces on either end of a string.

Boost.StringAlgorithms lets you provide a predicate as an additional parameter for different functions to determine which characters of the string the function is applied to. The versions with predicate are: boost::algorithm::trim_right_copy_if(), boost::algorithm::trim_left_copy_if(), boost::algorithm::trim_copy_if()

7. creating predicates with boost::algorithm::is_any_of()

#include <boost/algorithm/string.hpp>
#include <string>
#include <iostream> using namespace boost::algorithm; int main() {
std::string s = "--Boost C++ Libraries--";
std::cout << trim_left_copy_if(s, is_any_of("-")) << std::endl;
std::cout << trim_right_copy_if(s, is_any_of("-")) << std::endl;
std::cout << trim_copy_if(s, is_any_of("-")) << std::endl;
return ;
}

输出为:

Boost C++ Libraries--

--Boost C++ Libraries

Boost C++ Libraries

function called boost::algorithm::is_any_of(), which is a helper function to create a predicate that checks whether a certain character--passed as parameter to is_any_of() exists in a string. With boost::algorithm::is_any_of(), the characters for trimming a string can be specified.

many helper functions that return commonly used predicates: boost::algorithm::is_digit(), boost::algorithm::is_upper(), boost::algorithm::is_lower().

8. Algorithms to compare strings with others

#include <boost/algorithm/string.hpp>
#include <string>
#include <iostream> using namespace boost::algorithm; int main() {
std::string s = "Boost C++ Libraries";
std::cout.setf(std::ios::boolalpha);
std::cout < starts_with(s, "Boost") << std::endl;
std::cout << ends_with(s, "Libraries") << std::endl;
std::cout << contains(s, "C++") << std::endl;
std::cout << lexicographical_compare(s, "Boost") << std::endl;
return ;
}

输出为:

true

true

true

false

9. Splitting strings with boost::algorithm::split()

#include <boost/algorithm/string.hpp>
#include <string>
#include <vector>
#include <iostream> using namespace boost::algorithm; int main() {
std::string s = "Boost C++ Libraries";
std::vector<std::string> v;
split(v, s, is_space());
std::cout << v.size() << std::endl;
return ;
}

a given string can be split based on a delimiter. The substrings are stored in a container. The function requires as its third parameter a predicate that tests each character an checks whether the string should be split at the given position.

10. Searching strings with boost::algorithm::find_regex()

#include <boost/algorithm/string.hpp>
#include <boost/algorithm/string/regex.hpp>
#include <string>
#include <iostream> using namespace boost::algorithm; int main() {
std::string s = "Boost C++ Libraries";
boost::iterator_range<std::string::iterator> r = find_regex(s, boost::regex{"\\w\\+\\+"});
std::cout << r << std::endl;
return ;
}

输出为:C++

boost string algorithm的更多相关文章

  1. boost::string or boost::regex

    有时候写代码时会遇到下面问题 如果有一个文本文件,其包括内容类似于C语言,当中有一行例如以下格式的语句: layout (local_size_x = a,local_size_y = b, loca ...

  2. Right in the Center (js string algorithm)

    Right in the Center (js string algorithm) codewars https://www.codewars.com/kata/5f5da7a415fbdc0001a ...

  3. boost之algorithm/string

    头文件: #include<iostream>#include <boost/algorithm/string.hpp>using namespace std;using na ...

  4. boost::string 例题1

    如果有一个语法正确的shader源文件,其包括若干关于uniform变量的定义.请写一个程序从某个shader源文件里提取其全部定义的uniform变量.要求记录其名称.数据类型和初始值(如果有定义) ...

  5. String Algorithm Summary - 1

    目录 Suffix Array Summay 单个字符串问题 两个字符串问题 多个字符串问题 AC-Automaton Summary 求长度为n(2e9)不包含给定字符串的合法串个数 包含至少一个词 ...

  6. (四)boost库之正则表达式regex

    (四)boost库之正则表达式regex 正则表达式可以为我们带来极大的方便,有了它,再也不用为此烦恼 头文件: #include <boost/regex.hpp> 1.完全匹配 std ...

  7. boost replace_if replace_all_regex_copy用法

    #include <boost/algorithm/string.hpp> // for is_any_of #include <boost/range/algorithm/repl ...

  8. boost range

    1.Algorithms Boost.Range is library that, on the first sight, provides algorithms similar to those p ...

  9. C++ TR1、TR2与boost的关系

    C++ Technical Report 1 (TR1)是ISO/IEC TR 19768, C++ Library Extensions(函式库扩充)的一般名称.TR1是一份文件,内容提出了对C++ ...

随机推荐

  1. nyoj 762:第k个互质数

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=762 直接给代码好了,容斥原理具体看<组合数学> #include<bi ...

  2. vue父组件异步数据子组件接收遇到的坑

    大家都知道父组件给子组件传值,子组件给父组件传值,两者通信并不难,官网上也有给案例,但是如果子组件想拿到父组件的异步数据,常规的写法是不行的,下面我记录我常用的两者写法: 方法1: 子组件用v-if, ...

  3. flutter图片组件

    在flutter中,image组件有很多构造函数,常用的包括Image.asset(本地图片)和Image.network(远程图片). 常用属性 不管是显示本地图片还是远程图片,image组件都包含 ...

  4. 【SpingBoot】 测试如何使用SpringBoot搭建一个简单后台1

    很久没写博客了,最近接到一个组内的测试开发任务是做一个使用SpringBoot 开发一个后台程序(还未完成),特写感想记录一下 1. 为什么选择SpringBoot ? 首先是目前很多公司的后台还是J ...

  5. 测开之路二十七:Flask基础之动态路由

    参数化,用<变量名> 也可以指定变量类型 类型不对的时候会报错

  6. C#进阶系列——WebApi 路由机制剖析:你准备好了吗? 转载https://www.cnblogs.com/landeanfen/p/5501490.html

    阅读目录 一.MVC和WebApi路由机制比较 1.MVC里面的路由 2.WebApi里面的路由 二.WebApi路由基础 1.默认路由 2.自定义路由 3.路由原理 三.WebApi路由过程 1.根 ...

  7. QTP中类的使用(转)

    Call Test Class Tester Dim mvarTesterName,mvarAge,mvarGender                        Sub Class_Initia ...

  8. spring data jpa Specification动态查询

    package com.ytkj.entity; import javax.persistence.*; import java.io.Serializable; /** * @Entity * 作用 ...

  9. IIS 解决跨域问题

    打开 HTTP响应标头 添加如下三条 名称Access-Control-Allow-Origin  值*名称Access-Control-Allow-Headers  值Content-Type,Ac ...

  10. 如何访问 Redis 中的海量数据,服务才不会挂掉?

    来源:www.toutiao.com/i6697540366528152077 一.前言 有时候我们需要知道线上的Redis的使用情况,尤其需要知道一些前缀的key值,让我们怎么去查看呢?并且通常情况 ...