boost字符串算法
boost::algorithm简介
2007-12-08 16:59
boost::algorithm提供了很多字符串算法,包括: 大小写转换; 去除无效字符; 谓词; 查找; 删除/替换; 切割; 连接; 我们用写例子的方式来了解boost::algorithm能够为我们做些什么。
boost::algorithm学习
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost;
一:大小写转换
1 to_upper() 将字符串转为大写
Example:
string str1(" hello world! ");
to_upper(str1); // str1 == " HELLO WORLD! "
2 to_upper_copy() 将字符串转为大写,并且赋值给另一个字符串
Example:
string str1(" hello world! ");
string str2;
str2 = to_upper_copy(str1); // str2 == " HELLO WORLD! "
3 to_lower() 将字符串转为小写
Example:参看to_upper()
4 to_lower_copy() 将字符串转为小写,并且赋值给另一个字符串
Example:参看to_upper_copy()
二:Trimming(整理,去掉首尾的空格字符)
1 trim_left() 将字符串开头的空格去掉
Example:
string str1(" hello world! ");
trim_left(str1); // str1 == "hello world! "
2 trim_left_if() 将字符串开头的符合我们提供的“谓词”的特定字符去掉
Example:
bool NotH(const char &ch)
{
if(ch == ' ' || ch == 'H' || ch == 'h')
return true;
else
return false;
}
....
string str1(" hello world! ");
trim_left_if(str1, NotH); // str1 == "ello
world! "
3 trim_left_copy() 将字符串开头的空格去掉,并且赋值给另一个字符串
Example:
string str1(" hello world! ");
string str2;
str2 = trim_left_copy(str1); // str2 == "hello world! "
4 trim_left_copy_if() 将字符串开头的符合我们提供的“谓词”的特定字符去掉,并且赋值给另一个字符串
Example:
string str1(" hello world! ");
string str2;
str2 = trim_left_copy_if(str1, NotH); // str2 == "ello world! "
// 将字符串结尾的空格去掉,示例请参看上面
5 trim_right_copy_if()
6 trim_right_if()
7 trim_right_copy()
8 trim_right()
// 将字符串开头以及结尾的空格去掉,示例请参看上面
9 trim_copy_if()
10 trim_if()
11 trim_copy()
12 trim()
三:谓词
1 starts_with() 判断一个字符串是否是另外一个字符串的开始串
Example:
string str1("hello world!");
string str2("hello");
bool result = starts_with(str1, str2); // result == true
2 istarts_with() 判断一个字符串是否是另外一个字符串的开始串(不区分大小写)
Example:
string str1("hello world!");
string str2("Hello");
bool result = istarts_with(str1, str2); // result == true
3 ends_with() 判断一个字符串是否是另外一个字符串的结尾串
4 iends_with() 判断一个字符串是否是另外一个字符串的结尾串(不区分大小写)
5 contains() 判断一个字符串是否包含另外一个字符串
Example:
string str1("hello world!");
string str2("llo");
bool result = contains(str1, str2); // result == true
6 icontains() 判断一个字符串是否包含另外一个字符串(不区分大小写)
7 equals() 判断两个字符串是否相等
8 iequals() 判断两个字符串是否相等(不区分大小写)
9 lexicographical_compare() 按照字典排序,如果第一个字符串小于第二个字符串,返回true (我的boost1.33没有实现?)
10 ilexicographical_compare() 按照字典排序,如果第一个字符串小于第二个字符串,返回true(不区分大小写)(我的boost1.33没有实现?
)
11 all() 判断字符串中的所有字符是否全部满足这个谓词
Example:
bool is_123digit(const char &ch)
{
if(ch == '1' || ch == '2' || ch == '3')
return true;
else
return false;
}
...
string str1("12332211");
bool result = all(str1, is_123digit); // result == true
str1 = "412332211";
result = all(str1, is_123digit); // result == false
四:查找
1 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迭代器(不区分大小写)
3 find_last() 从尾查找字符串中的子字符串,返回这个子串在原串中的iterator_range迭代器
4 ifind_last() 从尾查找字符串中的子字符串,返回这个子串在原串中的iterator_range迭代器(不区分大小写)
5 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开始)(不区分大小写)
7 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个字节
9 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!");
五:删除/替换
1 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()
// 与上面类似,不过是从字符串n个匹配的开始替换
17 replace_nth()
Example:
string str1("hello world!");
replace_nth(str1, "o", 1, "O"); // str1 = "hello wOrld!"
18 replace_nth_copy()
19 ireplace_nth()
20 ireplace_nth_copy()
21 erase_nth()
22 erase_nth_copy()
23 ierase_nth()
24 ierase_nth_copy()
// 与上面类似,不过是将所有的匹配字符串替换
25 replace_all()
26 replace_all_copy()
27 ireplace_all()
28 ireplace_all_copy()
29 erase_all()
30 erase_all_copy()
31 ierase_all()
32 ierase_all_copy()
33 replace_head() 替换前n个字符
Example:
string str1("hello world!");
replace_head(str1, 5, "HELLO"); // str1 = "HELLO world!"
34 replace_head_copy() 替换前n个字符,并且赋值给另一个字符串
Example:
string str1("hello world!");
string str2;
str2 = replace_head_copy(str1, 5, "HELLO"); // str2 = "HELLO world!"
35 erase_head() 删除前n个字符
Example:
string str1("hello world!");
erase_head(str1, 5); // str1 = " world!"
36 erase_head_copy() 删除前n个字符,并且赋值给另一个字符串
Example:
string str1("hello world!");
string str2;
str2 = erase_head_copy(str1, 5); // str2 = " world!"
// 与上面类似(替换/删除后n个字符)
37 replace_tail()
38 replace_tail_copy()
39 erase_tail()
40 erase_tail_copy()
// 与正则表示式相关,稍后了解。
41 replace_regex()
42 replace_regex_copy()
43 erase_regex()
44 erase_regex_copy()
45 replace_all_regex()
46 replace_all_regex_copy()
47 erase_all_regex()
48 erase_all_regex_copy()
// 不是很清楚,稍后了解
49 find_format()
50 find_format_copy()
51 find_format_all()
52 find_format_all_copy()
六:切割
1 find_all() 查找所有匹配的值,并且将这些值放到给定的容器中
Example:
string str1("hello world!");
std::vector<std::string> result;
find_all(result, str1, "l"); // result = [3]("l","l","l")
2 ifind_all() 查找所有匹配的值,并且将这些值放到给定的容器中(不区分大小写)
3 find_all_regex() 与正则表达式相关,稍后了解
4 split() 按照给定的谓词切割字符串,并且把切割后的值放入到给定的容器中
Example:
class SplitNotThisChar
{
public:
SplitNotThisChar(const char ch) : m_char(ch) {}
bool operator ()(const char &ch) const
{
if(ch == m_char)
return true;
else
return false;
}
private:
char m_char;
};
string str1("hello world!");
string str2;
std::vector<std::string> result;
split(result, str1, SplitNotThisChar('l')); // result = [4]("he","","o wor","d!")
5 split_regex() 与正则表达式相关,稍后了解
6 iter_find() 按照给定Finder查找字符串,并且把查找到的值放入到给定的容器中
Example:
string str1("hello world!");
std::vector<std::string> result;
boost字符串算法的更多相关文章
- 【字符串算法1】 再谈字符串Hash(优雅的暴力)
[字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述 [字符串算法1] 字符串Hash 老版原文: RK哈希(Rabin_Ka ...
- 【字符串算法2】浅谈Manacher算法
[字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述 字符串算法2:Manacher算法 问题:给出字符串S(限制见后)求出最 ...
- 【字符串算法3】浅谈KMP算法
[字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述 [字符串算法3]KMP算法 Part1 理解KMP的精髓和思想 其实KM ...
- ACM -- 算法小结(八)字符串算法之Manacher算法
字符串算法 -- Manacher算法 首先介绍基础入门知识,以下这部分来着一贴吧,由于是很久之前看的,最近才整理一下,发现没有保存链接,请原创楼主见谅. //首先:大家都知道什么叫回文串吧,这个算法 ...
- 字符串算法之 AC自己主动机
近期一直在学习字符串之类的算法,感觉BF算法,尽管非常easy理解,可是easy超时,全部就想学习其它的一些字符串算法来提高一下,近期学习了一下AC自己主动机.尽管感觉有所收获,可是还是有些朦胧的感觉 ...
- boost::algorithm(字符串算法库)
没什么说的,需要 #include<boost/algorithm/string.hpp> 1.大小写转换 std::string s("test string"); ...
- 字符串算法(string_algorithm)
format 作用 格式化输出对象,可以不改变流输出状态实现类似于printf()的输出 头文件 #include <boost/format.hpp> using namespace b ...
- boost之算法
STL里的算法已经很好了,在boost里有几个小的算法 1.BOOST_FOREACH使用方法,定义一个容器里内部类型数据,容器作为参数传递. #include <iostream> #i ...
- <转自原博客> 可爱的字符串算法们
在非常强又非常关心学弟学妹学习的企鹅学长变态的考纲下,我们无奈中选择一起学习新姿势 first:KMP算法 这是一个小迪更过博客的算法,我就不好意思在这里献丑了,所以献上友链一份:http://rab ...
随机推荐
- SLP的模块结构
SLP的模块结构 在开发初期,拟将SLP分为5个模块: 基础练习模块 特定歌曲难点练习模块 玩家能力测试模块 全局设置模块 玩家信息模块 基础练习模块 这里提供可控类型.可控长度.可控BPM的练习套餐 ...
- android 多媒体数据库(非原创)
推荐文章:http://fzlihui.iteye.com/blog/1097952,http://www.cnblogs.com/pen-ink/archive/2011/06/02/2068410 ...
- Poj 1276 Cash Machine 多重背包
Cash Machine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 26172 Accepted: 9238 Des ...
- mybatis教程
http://www.yihaomen.com/article/java/302.htm
- 移动设备如何打开RMS加密的文档
关键字:RMS. AZure RMS.IPhone.Android.Office365.Sharepoint.Exchange 最近总是碰到要求用苹果手机及安卓手机阅读RMS加密文档的需求,经过查找相 ...
- CentOS7安装MariaDB10.1.14
1.下载MariaDB 下载地址:https://downloads.mariadb.org/mariadb/10.1.14/ 这里选择mariadb-10.1.14-linux-x86_64.tar ...
- 通过cygwin安装openSSH
openSSH的安装是学习hadoop必不可少的一步,如果ssh装不好,hadoop的安装会进行不下去.本人初学hadoop时发现以前安装ssh走了一些弯路,现在又有了一些认识,所以重写了这篇日志,供 ...
- Ubuntu/linux 有关权限修改的命令
chmod更改文件权限命令 最常用的基础命令chmod chmod 777 目录名(路径名) 777 三位数字分别代表 user.group.others 的权限,可读(r).可写(w).可执行(x ...
- OJ生成器(一)制作Online Judge前的准备和策划
我这校区新的微机老师斗志昂扬,准备让我们这学校萎靡的信息技术竞赛重振雄风.然后有一次我半开玩笑地说建一个自己的OJ吧,老师也就鼓励我去做了. 开什么玩笑……!我可是马上要参加NOIP的人! 于是老师说 ...
- [转]Google Guava官方教程(中文版)
Google Guava官方教程(中文版) http://ifeve.com/google-guava/