首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一起学习Boost标准库-Boost.texical

今天接续介绍有关字符串表示相关的两个boost库:

lexical_cast 将数值转换成字符串

format 字符串输出格式化

首先,介绍下lexical_cast,闻其名,知其意。类似C中的atoi函数,可以进行字符串与整数/浮点数之间的字面转换

Boost::lexical_cast库

前期准备

lexical_cast库位于boost命名空间下,使用需要引入头文件

函数声明

lexical_cast使用类似C++标类型操作符的形式进行通用的语法,其声明如下:

第一种形式有两个模版参数,Target为需要转换的目标类型,通常是数字类型或者std::string,第二个参数Source则不用写,可以通过函数参数推到出来,调用形式如下

第二种形式主要用来处理C字符串,支持多种类型,只接受一个模板参数Target,指明转换后的目标类型,函数参数chars和count则标记了要转换的字符串范围

使用样例

通过上文的介绍,您大概已经知道如何使用了,此处,我们就通过一个简单Demo来使用lexical_cast库

Output:

注意:使用lexical_cast时要注意,转换成数字的字符串中只能有数字和小数点,不能出现字母或其他非数字字符,同时也不支持高级的格式控制,如果要进行复杂的格式控制可以使用std::stringstramboost::format(后面介绍该库)

错误处理

当lexcialcast无法执行转换操作的时候会抛出异常badlexicalcast,他是std::badcast的派生类,此处以上文中注意来说明

Output:

如果每次都通过异常捕获来处理,就比较麻烦了,还好lexicalcast为我们想到了,再命名空间boost::conversion提供方法*trylexical_convert()* 函数来避免抛出异常,通过返回bool值来表示是否转换成功。具体使用如下:

Boost.format库

C++标准库提供了强大的输入输出流处理,可以通过设置输出各种各样的格式,精度控制、填充、对齐等。但是唯一缺点就是太复杂了,真心记不住这么多,还是怀恋printf()可以通过规定的样式输出想要的格式。虽然C++中可以继续使用printf()但它缺乏类型安全检查等其他缺点,重点就是boost.format库实现了类似于printf()的格式化对象,可以把参数格式化到一个字符串,而且是类型安全的,是一个header-only 的函数库,只要准备好头文件,不用预先编译就可以使用了,最主要的是用着还挺顺手。

前期准备

format库位于boost命名空间中,需引入头文件:

类声明

str: 返回format对象内部已经格式化号的字符串

size : 返回format对象格式化号的字符串长度,可以直接从str()返回的string.size()

parse :重新格式化,清空format对象内部缓存,改用一个新的格式化字符串,如果只是想清空缓存,则使用clear(),它把format对象恢复到初始化状态

operator% : 可以接受待格式化的任意参数,%输入的参数个数必须等于格式化字符串中要求的个数,过多或者过少都会抛出异常

operator

不过要注意的是,透过operator%传给boost::format对象的变量是会储存在对象内部的,所以可以分批的传入变数;但是如果变量的数量不符合的话,在编译阶段虽然不会出现错误,可是到了执行阶段还是会让程序崩溃,所以在使用上必须小心一点。 不过,在有输出后,是可以再重新传入新的变量、重复使用同一个boost::format 对象的。

格式化语法

format基本继承了printf的格式化语法,格式化选项以%开始,后面是格式规则

详细请参考printf格式输出

除了支持printf格式化外,还新增了格式:

%|spec| :与printf格式选项功能相同,但是两边增加竖线分隔,更好的区分格式化选项与普通字符

%N% :标记第N个参数,相当于占位符,不带任何其他格式化的选项

通过以下使用竖线分隔,更加清楚明了格式化参数

使用样例

Output:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180513G1HWC400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券