boost::lexical_cast 字符类型转换 字符串算法和文字处理
2013-08-29 18:00
369 查看
1,字符串 到 数值类型的转换
2,数值 到 字符串的转换
3,异常处理情况
4,boost::lexical_cast 的原型:
template<typename Target, typename Source>
Target lexical_cast(Source arg);
lexical_cast 是依赖于字符串流 std::stringstream 的,其原理也是相当的简单:把源类型 (Source) 读入到字符流中,再写到目标类型 (Target) 中。但这里同时也带来了一些限制:
- 输入数据 (arg) 必须能够 “完整” 地转换,否则就会抛出 bad_lexical_cast 异常。例如:
int i = boost::lexical_cast<int>("123.456"); // this will throw
因为 “123.456” 只能 “部分” 地转换为 123,不能 “完整” 地转换为 123.456,还是让我们需要适当的注意一些这两个模板参数就好了。
- 由于 Visual C++ 6 的本地化(locale)部分实现有问题,如果使用了非默认的 locale,可能会莫名其妙地抛出异常。不过我现在转投 Dev C++ 了:)
- 源类型 (Source) 必须是一个可以输出到输出流的类型(OutputStreamable),也意味着该类型需要 operator<< 被定义。
- 同样的,目标类型 (Target) 必须是一个可以输入到输入流的类型 (InputStreamable),也意味着该类型需要 operator>> 被定义。
- 另外,Both Source and Target are CopyConstructible。
- Target is DefaultConstructible。
其中,下面的四个限制是在使用自定义类型之间转换时必须做的一些工作的(当然流行的使用的 C 库函数等等都是不可以处理自定义类型之间的转换的)
2,数值 到 字符串的转换
3,异常处理情况
4,boost::lexical_cast 的原型:
template<typename Target, typename Source>
Target lexical_cast(Source arg);
lexical_cast 是依赖于字符串流 std::stringstream 的,其原理也是相当的简单:把源类型 (Source) 读入到字符流中,再写到目标类型 (Target) 中。但这里同时也带来了一些限制:
- 输入数据 (arg) 必须能够 “完整” 地转换,否则就会抛出 bad_lexical_cast 异常。例如:
int i = boost::lexical_cast<int>("123.456"); // this will throw
因为 “123.456” 只能 “部分” 地转换为 123,不能 “完整” 地转换为 123.456,还是让我们需要适当的注意一些这两个模板参数就好了。
- 由于 Visual C++ 6 的本地化(locale)部分实现有问题,如果使用了非默认的 locale,可能会莫名其妙地抛出异常。不过我现在转投 Dev C++ 了:)
- 源类型 (Source) 必须是一个可以输出到输出流的类型(OutputStreamable),也意味着该类型需要 operator<< 被定义。
- 同样的,目标类型 (Target) 必须是一个可以输入到输入流的类型 (InputStreamable),也意味着该类型需要 operator>> 被定义。
- 另外,Both Source and Target are CopyConstructible。
- Target is DefaultConstructible。
其中,下面的四个限制是在使用自定义类型之间转换时必须做的一些工作的(当然流行的使用的 C 库函数等等都是不可以处理自定义类型之间的转换的)
#include <boost/lexical_cast.hpp> #include <iostream> #include <string> #define ERROR_LEXICAL_CAST 1 int main() { using boost::lexical_cast; int a = 0; double b = 0.0; std::string s = ""; int e = 0; try { // ----- 字符串 --> 数值 a = lexical_cast<int>("123"); b = lexical_cast<double>("123.12"); // ----- 数值 --> 字符串 s = lexical_cast<std::string>("123456.7"); // ----- 异常处理演示 e = lexical_cast<int>("abc"); } catch(boost::bad_lexical_cast& e) { // bad lexical cast: source type value could not be interpreted as target std::cout << e.what() << std::endl; return ERROR_LEXICAL_CAST; } std::cout << a << std::endl; // 输出:123 std::cout << b << std::endl; // 输出:123.12 std::cout << s << std::endl; // 输出:123456.7 return 0; }
相关文章推荐
- [Boost基础]字符串和文本处理——lexical_cast词汇转换
- boost-使用format和lexical_cast实现数字和字符串之间的转换
- boost c++ lib on linux(2) - lexical_cast字符串数值转换
- boost之lexical_cast库,数值/字符串转换及其异常处理
- BOOST 类型转换(lexical_cast)崩溃问题
- boost 字符串与文本处理 -> lexical_cast
- c++中的类型转换,static_cast,reinterpret_cast,boost::lexical_cast
- 数据类型转换与字符串处理
- 整型数组处理算法(十四)不用库函数,用C语言实现将一整型数转换成字符串
- 生成二维码 加密解密类 TABLE转换成实体、TABLE转换成实体集合(可转换成对象和值类型) COOKIE帮助类 数据类型转换 截取字符串 根据IP获取地点 生成随机字符 UNIX时间转换为DATETIME\DATETIME转换为UNIXTIME 是否包含中文 生成秘钥方式之一 计算某一年 某一周 的起始时间和结束时间
- VC中常用的字符类型及相应的字符串处理函数
- 本图片处理类功能非常之强大可以实现几乎所有WEB开发中对图像的处理功能都集成了,包括有缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等功能
- 【字符串处理算法】字符串转换为整数的算法设计及C代码实现
- String字符串与字符(char类型)数组互相转换
- <Boost> boost::lexical_cast字面转换和gregorian::date日期
- [bxd学习java基本点]1.基本数据类型与字符串型转换与其他类型转成字符串
- VC中char,wchar_t,TCHAR及相应字符串处理函数辨析(附常用数据类型转换)
- cast 和 convert 把整数转换为字符串类型时的注意事项
- gridview导出excel文件且把数字类型的列转换成字符导出(防止处理成科学计数法)
- [C/C++]_[初级]_[标准库之几种算法库函数的运用,如字符串查找(字符个数查找)、分隔、删除、替换、排序、字符交换位置、大小写转换等等]