boost中string_algo库是一个非常全面的字符串算法库,提供了大量的字符串操作函数与算法,例如大小写无关比较,修剪,特定模式的子串查找等,可以在不使用正则表达式的情况下处理大多数字符串相关的问题。
头文件boost/algorithm/string.hpp
五大类
1,大小写转换
2,判断式与分类
3,修剪
4,查找与替换
5,分割与合并
命名惯例
前缀i:表示大小写不敏感,否则大小写敏感(ingore)
后缀copy:表明算法不变动输入,返回处理结果的拷贝,否则算法原地处理,即输入与输出
后缀if:有这个后缀表明算法需要一个作为判断式的谓词函数对象,否则使用默认判断准则。
1,大小写转换方法
void to_upper(T &Input); //转换为大写,改变原有字符串
void to_lower(T &Input); //转换为小写,改变原有字符串
T to_upper_copy(T &Input); //转换为大写,不改变原有字符串
T to_lower_copy(T &Input); //转换为小写,不改变原有字符串
2,判断式
bool starts_with(const string s1,cosnt string s2): //检测一个字符串s1是否为另一个字符串s2的前缀
bool ends_with(const string s1,cosnt string s2): //检测一个字符串s1是否为另一个字符串s2的后缀
bool contains(const string s1,cosnt string s2): //检测一个字符串s1是否被另一个字符串s2包含
bool equals(const string s1,cosnt string s2): //检测一个字符串s1是否与另一个字符串s2相等
lexicographical_compare(const string s1,cosnt string s2): //检测一个字符串中的所有元素是否满足指定的判断式,s1按字典顺序是否小于s2;
bool all(const string s,判断条件): //检测一个字符串中的所有元素是否满足指定的判断式
判断条件例程:is_lower(),is_upper()
以上方法,除了all之外,所有算法都有另一个 i 的前缀版本。
以下方法在使用过程中,是先建立对象,再重载()运算符
is_equal(): //比较两个对象是否相等
is_less(): //比较两个对象是否具有小于关系
is_not_greater(): //比较两个对象是否不大于
is_space(): //字符是否为空格
is_alnum(): //字符是否为字母和数字字符
is_alpha(): //字符是否为字母
is_cntrl(): //字符是否为控制字符
is_digit(): //字符是否为十进制数字
is_lower(): //字符是否为小写字符
is_upper: //字符是否为大写字符
is_punct(): //字符是否为标点符号字符
is_xdigit(): //字符 是否为16进制数字
is_any_of(): //字符是否是参数字符序列中的任意字符
3,修剪
trim 删除字符串首尾空格,主要包括如下API
trim_left_copy://删除字符串首部空格,并返回 新的字符串,原来的字符串 不改变。
trim_right_copy://删除字符串尾部空格,并返回 新的字符串,原来的字符串 不改变。
trim_copy://删除字符串首部尾部空格,并返回 新的字符串,原来的字符串 不改变。
trim_left_copy_if://删除字符串首部满足谓词,并返回 新的字符串,原来的字符串 不改变。
trim_right_copy_if://删除字符串尾部满足谓词,并返回 新的字符串,原来的字符串 不改变。
trim_copy_if://删除字符串首尾部满足谓词,并返回 新的字符串,原来的字符串 不改变。
trim_left://删除字符串首部空格,原来的字符串 改变。
trim_right://删除字符串尾部空格,原来的字符串 改变。
trim://删除字符串首尾部空格,原来的字符串 改变。
trim_all_copy://删除字符串首部空格,如果中间有多个空格,只保留第一个,并返回 新的字符串,原来的字符串不改变。
trim_all://删除字符串首部空格,如果中间有多个空格,只保留第一个,原来的字符串改变。
trim_all_if://删除满足谓词字符串首部,如果中间有多个,只保留第一个,原来的字符串改变。
trim_all_copy_if://删除满足谓词字符串首部,如果中间有多个,只保留第一个,并返回 新的字符串,原来的字符串不改变。
trim_fill_copy://使用新字符,填充字符串所有空格,并返回 新的字符串,原来的字符串不改变。
trim_fill_copy_if://使用新字符,满足谓词, 填充字符串,并返回 新的字符串,原来的字符串不改变。
trim_fill://使用新字符,填充字符串所有空格,原来的字符串改变。
trim_fill_if://使用新字符,满足谓词, 填充字符串,原来的字符串改变。
4,查找与替换
find_first://在大字符串中查找子串第一次出现时,返回 子串在大串的位置。
ifind_first://在大字符串中查找子串第一次出现时,并且忽略大小,返回 子串在大串的位置。
find_last://在大字符串中查找子串最后一次出现时,返回 子串在大串的位置。
ifind_last://在大字符串中查找子串最后一次出现时,并且忽略大小,返回 子串在大串的位置。
find_nth://大字符串中在第n次出现后,查找子串,返回 子串在大串的位置。
ifind_nth://大字符串中在第n次出现后,查找子串,并且忽略大小,返回 子串在大串的位置。
find_head://查找字符串中在头n个字符,返回 位置
find_tail://查找字符串中在尾n个字符,返回 位置
find://在大字符串中查找子串第一次出现时,返回 子串在大串的位置。
replace/erase_first: // 替换/删除第一次出现的字符串
replace/erase_last: // 替换/删除最后一次出现的字符串
replace/erase_nth: // 替换/删除第n次出现的字符串 ,这个函数和我们说过的MString的有些区别,MString的索引是从开始的,这里是从开始的
replace/erase_all: // 替换/删除所有
replace/erase_head :// 替换/删除前面的多少个字节
replace/erese_tail :// 替换/删除最后多少个字节
5,分割和合并
find_all://在字符串string str中查找string sub,返回找到的所有的 sub。
ifind_all://在字符串string str中查找string sub,同时忽略大小,返回找到的所有的 sub。
split://将字符串按照某些条件,进行分割,返回分割后的字符串列表
join://将字符串 列表,使用指定的字符,连接起来,返新的字符串。
join_if://将字符串 列表,满足特定条件,使用指定的字符,连接起来,返新的字符串。