Boost String Algorithms Library 函数详解一 (case conversion和trimmming)

本文详细介绍BoostStringAlgorithmsLibrary的功能及使用方法,包括大小写转换、去除空白字符等功能,并通过示例代码展示如何使用这些函数。

Boost String Algorithms Library 是很有用的一个库,它让C++程序员不用一次又一次的为了字符串的处理制造一些小小的轮子。这里我将逐一用实例详细的说明每一个函数的使用,希望给自己给同道带来方便。

Boost String Algorithms Library 是很有用的一个库,它让C++程序员不用一次又一次的为了字符串的处理制造一些小小的轮子。《浅尝boost之String algorithms library》里我主要介绍了它的Split ,因为这个功能很出彩,其它则一带而过。不过,当多次向朋友推荐这个库后,反馈得到的信息让我觉得详细列出其每一个函数的使用,作为一个程序员处理字符串时的手册,是件更有意义的事情。这里我将根据http://www.boost.org/doc/html/string_algo/quickref.html列表顺序,逐一用实例详细的说明每一个函数的使用,希望给自己给同道带来方便。

Table 11.1. Case Conversion

 

Algorithm nameDescriptionFunctions
to_upperConvert a string to upper caseto_upper_copy()
to_upper()
to_lowerConvert a string to lower caseto_lower_copy()
to_lower()



基础示例:

 1       //  _copy
 2         string  str1  =   " AABBccdd " ;
 3      assert(to_lower_copy(str1)  ==   " aabbccdd "   &&  str1 == " AABBccdd " );
 4      assert(to_upper_copy(str1)  ==   " AABBCCDD "   &&  str1 == " AABBccdd " );
 5       //
 6         string  str2  =  str1;
 7      to_lower(str2);
 8      assert(str2  ==   " aabbccdd " );
 9      str2  =  str1;
10      to_upper(str2);
11      assert(str2  ==   " AABBCCDD " );


注意:带_copy后缀的函数与不带_copy后缀的函数的区别,带_copy的函数不会修改源字符串,而是返回一个转换后的新字符串。

Table 11.2. Trimming

Algorithm nameDescriptionFunctions
trim_leftRemove leading spaces from a stringtrim_left_copy_if()
trim_left_if()
trim_left_copy()
trim_left()
trim_rightRemove trailing spaces from a stringtrim_right_copy_if()
trim_right_if()
trim_right_copy()
trim_right()
trimRemove leading and trailing spaces from a stringtrim_copy_if()
trim_if()
trim_copy()
trim()


基础示例:

 1       //  _copy_if
 2         string  str1( "      space      " );
 3      assert(trim_left_copy_if(str1, is_space())  ==   " space      " );
 4      assert(trim_right_copy_if(str1, is_space())  ==   "      space " );
 5      assert(trim_copy_if(str1, is_space())  ==   " space " );
 6       //  _copy
 7      assert(trim_left_copy(str1)  ==   " space      " );
 8      assert(trim_right_copy(str1)  ==   "      space " );
 9      assert(trim_copy(str1)  ==   " space " );
10       //  _if
11       string  str2  =  str1;
12      trim_left_if(str2, is_space());
13      assert(str2  ==   " space      " );
14      str2  =  str1;
15      trim_right_if(str2, is_space());
16      assert(str2  ==   "      space " );
17      str2  =  str1;
18      trim_if(str2, is_space());
19      assert(str2  ==   " space " );
20       //
21      str2  =  str1;
22      trim_left(str2);
23      assert(str2  ==   " space      " );
24      str2  =  str1;
25      trim_right(str2);
26      assert(str2  ==   "      space " );
27      str2  =  str1;
28      trim(str2);
29      assert(str2  ==   " space " );


高级示例:

 

 

 1       // is_any_of()  非常重要的用法,可对付大部分的实际应用
 2       string  str3( " 123other " );
 3      assert(trim_left_copy_if(str3, is_any_of( " 321 " ))  ==   " other " );
 4       // std::back_inserter 
 5       string  str;
 6      trim_left_copy_if(std::back_inserter(str), str1, is_space());
 7      assert(str  ==   " space      " );
 8       // is_classified()
 9      assert(trim_copy_if(str3, is_classified(std::ctype_base::digit))   ==   " other " );
10       // 应用其它的 is_xxxxx方法
11      assert(trim_copy_if(str3, is_digit())   ==   " other " );
12       // 通过bind2nd,使用greater, less, less_equal等方法
13       string  str4( " acdxxxx " );
14      assert(trim_left_copy_if(str4, bind2nd(less < char > (), ' d ' ))  ==   " dxxxx " );
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值