boost及字符串处理函数——stringalgorithm.docVIP

boost及字符串处理函数——stringalgorithm.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
boost及字符串处理函数——stringalgorithm

boost的字符串处理函数——string algorithm c++在stl库中提供了一个string类用以代替c语言的char*来实现字符串功能,不过stl的string只提供了一个连接字符串和查找的功能,其它的常用函数几乎一律没有,就连字符串替换都得自己来实现,和c#的字符串函数比起来简直弱爆了。 boost库在头文件boost/algorithm/string.hpp中提供了不少字符串处理函数,用以帮助我们实现基本的字符串处理功能,极大程度上缓解了字符串函数不够用的问题。 ????string str1(hello abc-*-ABC-*-aBc goodbye); ????vectorstring SplitVec; // #2: Search for tokens ????split(SplitVec, str1, is_any_of(-*), token_compress_on); // SplitVec == { hello abc,ABC,aBc goodbye } 上述代码就提供了一个split的功能,不过和c#的版本相比,还是不够简洁,如果设计成这样就更加好用了: ????auto SplitVec = split(str1, is_any_of(-*), token_compress_on); 之所以不以这种形式设计,貌似是因为如果在split函数里构造返回值的话,会有一次数据拷贝的开销。从中也可以看出,boost的设计还是以性能为主的。而.net程序天然没有返回值拷贝带来的开销,可以采取那种更简洁的接口形式。 PS:我觉得可以像.net那样,在堆变量中保存结果,然后通过auto_ptr封装后作作为返回值。即有简洁的接口形式,又没有数据拷贝的开销,堆变量也能通过auto_ptr自动释放。 同样,也是出于性能方向的考虑,对于会产生新字符串的函数,往往会有一个xxx和xxx_copy两个版本,例如tolower就有to_lower和to_lower_copy两个版本:一个是直接变更本身的值,一个是构造新字符串,具体选取那个根据实际场景来考虑。 另外,字符串比较函数中,往往有区分大小写和不区分大小写的算法。在boost中并不是通过参数来控制,而是直接提供xxx和ixxx两个版本,其 中i就表示ignor case。如equals和iequals。还有的需要和条件函数一并使用的,这时就会提供一个xxx_if的版本。 由于提供的字符串函数比较多,这里我只按每类列举几个常用的函数和示例,如果同一个算法有xxx_copy的版本或ixxx版本,也只列举基本的形式。其它的情参看boost文档。 Case Conversion 大小写转换涉及到四个函数:to_upper()、to_upper()以及xxx_copy的版本。基本用法如下: ????cout to_upper_copy(string(hello world)) endl; Trimming Trimming函数主要有trim()、trim_left()、trim_right()和他们的xxx_copy和xxx_if版本。用于去除字符串首位的空白字符: ????cout trim_copy(std::string( hello world)) endl; 当然,也不限于只去掉空白字符: ????cout trim_copy_if(std::string(,,,hello world), is_any_of( ,.:)) endl; Predicates Predicates函数主要有:starts_with()?、ends_with()?、contains()?、equals()?、lexicographical_compare()?、all()以及他们的ixxx版本。基本上从名字里就可以看出怎么用了: ????cout (ends_with(hello world, world) ? true : false) endl; Find algorithms 查找算法有好几种:find()、first()、find_last()、find_nth()?、find_head()、find_tail()、find_token()、find_regex()。常见的用法如下: ????auto result = find_first(hello world, world); ????if(result.empty()) ????????cout cant find result endl; ????else ????????cout result endl; 其中result是一个boost::iterat

文档评论(0)

liwenhua00 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档