- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
boost的字符串处理函数——stringalgorithm,boost字符串处理,字符串处理函数,c字符串处理函数,php字符串处理函数,c语言字符串处理函数,js字符串处理函数,java字符串处理函数,mysql字符串处理函数,oracle字符串处理函数
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
您可能关注的文档
- ArcGIS.Server.9.3和ArcGISAPIforJavaScript实现点线面的buffer分析.doc
- ArcEngine空间数据查询.doc
- APS复习准备资料独创.doc
- ArcCatalog添加空间数据库连接方法.doc
- ArcGIS下的11000地形图符号化研究.pdf
- ARCGIS中坐标转换及地理坐标投影坐标定义.doc
- ArcGIS中投影坐标和地理坐标的定义.doc
- ArcGIS地图数据处理.doc
- ArcGIS中的正射校正方法.pdf
- ARCGIS坐标系常见问题解答.pdf
- 高二选择性必修中册 统编版 语文 第二单元《党费》课件.pptx
- 高二 人教A版 数学 选择性必修第一册 第三章《双曲线的简单几何性质》课件.pptx
- 高二 统编版选择性必修上册 语文 第一单元《县委书记的榜样--焦裕禄》(第一课时)课件.pptx
- 高二年级 人教版 英语 选择性必修四第四单元《Lesson 2 Reading and Thinking (2)》课件.pptx
- 高三 人教版 生物学 选择性必修1第3章《体液调节》一轮复习课件.pptx
- 高三 人教版 生物学选择性必修1 第2章第2、3节《神经调节》一轮复习(第1课时)课件.pptx
- 高二 统编版 语文 选择性必修中册 第二单元《小二黑结婚》(节选)第一课时 课件.pptx
- 高二 统编版 语文选择性必修上 第四单元《采用合理的论证方法(三)》课件.pptx
- 高三 人教版 英语 选修一 第三单元《Historical Events》课件.pptx
- 高二 部编版 语文选择性必修上册 第四单元《运用有效的推理形式(一)》课件.pptx
文档评论(0)