用法示例
string str("Power Bomb"); assert(iends_with(str,"bomb")); //大小写无关检测后缀 assert(!ends_with(str,"bomb")); //大小写敏感检测后缀 assert(starts_with(str,"Pow")); //检测前缀 assert(contains(str,"er")); //测试包含关系 string str2 = to_lower_copy(str); //转换成小写 assert(iequals(str,str2)); //大小写无关判断相等 assert(ilexicographical_compare(str,str3)); //大小写无关字符串比较 assert(all(str2.substr(0,5),is_lower())); //检测字符串均小写 分类提供一组分类函数,用于检测字符串是否符合某种特性,主要搭配其他算法使用,如上一节的all
is_space:字符是否为空格或制表符(tab)
is_alnum:字符是否为字母和数字字符
is_alpha:字符是否为字母
is_cntrl:字符是否为控制字符
is_digit:字符是否为十进制数字
is_graph:字符是否为图形字符
is_lower:字符是否为小写字符
is_print:字符是否为可打印字符
is_punct:字符是否为标点符号字符
is_upper:字符是否为大写字符
is_xdigit:字符是否为十六进制数字
is_any_of:字符是否是参数字符序列中的任意字符
if_from_range:字符是否位于指定区间内,即from<=ch<=to
需要注意的是这些函数并不真正地检测字符,而是返回一个类型为detail::is_classifiedF的函数对象,这个函数对象的operator()才是真正的分类函数(因此,这些函数都属于工厂函数)。
修剪提供三个算法,删去字符串开头结尾的空格,提供_copy后缀和_if后缀
trim_left:删除左边的空格
trim_right:删除右边的空格
trim:删除两边的空格
用法示例
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 = "2020 Happy new Year!!!"; cout << fmt % trim_left_copy_if(str2,is_digit()); //删除左端的数字 cout << fmt % trim_right_copy_if(str2,is_punct()); //删除右边的标点 //删除两端的标点、数字和空格 cout << fmt % trim_copy_if(str2,is_punct() || is_digit() || is_space());执行结果
|samus aran| |samus aran | | samus aran| | Happy new Year!!!| |2020 Happy new Year| |Happy new Year| 查找提供的查找算法如下:
find_first:查找字符串在输入中第一次出现的位置
find_last:查找字符串在输入中最后一次出现的位置
find_nth:查找字符串在输入中的第N次(从0开始计数)出现的位置
find_head:取一个字符串开头N个字符的子串,相当于substr(0,n)
find_tail:取一个字符串末尾N个字符的子串
【注意事项】
这些算法的返回值是iterator_range,在概念上类似于std::pair,包装了两个迭代器,可以用begin()和end()访问。提供了i前缀的用法。
用法示例
执行结果
|long|.pos = 5 |Long|.pos = 0 |ng|.pos = 30 |Long|.pos = 0 |king.|.pos = 28 替换与删除替换、删除操作与查找算法非常接近,是在查找到结果后再对字符串进行处理,具体如下:
replace/erase_first:替换/删除字符串在输入中的第一次出现
replace/erase_last:替换/删除字符串在输入中的最后一次出现
replace/erase_nth:替换/删除字符串在输入中的第n次出现
replace/erase_all:替换/删除字符串在输入中的所有出现
replace/erase_head:替换/删除输入的开头
replace/erase_tail:替换/删除输入的末尾
前8个算法每个都有前缀i、后缀_copy的组合,有四个版本,后4个则只有后缀_copy的两个版本