boost::lexical_cast


boost::lexical_cast为数值之间的转换(conversion)提供了一揽子方案,比如:将一个字符串"123"转换成整数123,代码如下:

string s = "123";
int a = lexical_cast<int>(s);
这种方法非常简单,笔者强烈建议大家忘掉std诸多的函数,直接使用boost:: lexical_cast。如果转换发生了意外,lexical_cast会抛出一个bad_lexical_cast异常,因此程序中需要对其进行捕捉。

现在动手

编写如下程序,体验如何使用boost:: lexical_cast完成数值转换。

【程序 4-11】使用boost:: lexical_cast完成对象数值转换

01 #include "stdafx.h"
02
03 #include <iostream>
04 #include <boost/lexical_cast.hpp>
05
06 using namespace std;
07 using namespace boost;
08
09 int main()
10 {
11 string s = "123";
12 int a = lexical_cast<int>(s);
13 double b = lexical_cast<double>(s);
14
15 printf("%d/r/n", a + 1);
16 printf("%lf/r/n", b + 1);
17
18 try
19 {
20 int c = lexical_cast<int>("wrong number");
21 }
22 catch(bad_lexical_cast & e)
23 {
24 printf("%s/r/n", e.what());
25 }
26
27 return 0;28 }
如上程序实现字符串"123"到整数、双精度实数的转换(为了防止程序作弊,我们特意让它将值加1),结果输出如图4-19所示。

有了这个还用个毛atoi,itoa。

还有一种方法有std::stringstream也行,用流进行转换。

boost::lexical_cast,布布扣,bubuko.com

时间: 2024-12-08 22:38:54

boost::lexical_cast的相关文章

boost.lexical_cast 学习

1,字符串 到 数值类型的转换 2,数值 到 字符串的转换 3,异常处理情况 4,boost::lexical_cast 的原型: template<typename Target, typename Source>     Target lexical_cast(Source arg); lexical_cast 是依赖于字符串流 std::stringstream 的,其原理也是相当的简单:把源类型 (Source) 读入到字符流中,再写到目标类型 (Target) 中.但这里同时也带来了

Boost::Lexical_cast 的使用

1.C++代码 #include <boost/lexical_cast.hpp> #include <iostream> int main() { using boost::lexical_cast; int a = lexical_cast<int>("123"); double b = lexical_cast<double>("123.12"); std::cout<<a<<std::e

用boost::lexical_cast进行数值转换

在STL库中,我们可以通过stringstream来实现字符串和数字间的转换: int i = 0;    stringstream ss; ss << "123";    ss >> i; 但stringstream是没有错误检查的功能,例如对如如下代码,会将i给赋值为12. ss << "12.3";    ss >> i; 甚至连这样的代码都能正常运行: ss << "hello world

Boost::lexical_cast类型转换

1.字符串->数值 C++代码 1 #include <boost/lexical_cast.hpp> 2 #include <iostream> 3 int main() 4 { 5 using boost::lexical_cast; 6 int a = lexical_cast<int>("123"); 7 double b = lexical_cast<double>("123.12"); 8 std::

boost::lexical_cast常见用法详解之万能转换

提示: 虽然在c中可是使用类似于atoi之类的函数对字符串转换成整型,但是我们在这儿还是推荐使用这个函数 如果转换发生了错误,lexical_cast会抛出一个bad_lexical_cast异常,因此程序中需要对其进行捕捉. 下面是程序示例: #include <iostream> #include <boost/lexical_cast.hpp> using namespace std; using namespace boost; int main() { string s

boost之lexical_cast

第一次翻译,虽然是个很简单的函数介绍... 文件boost/lexical_cast.hpp中定义了此函数: [cpp] view plain copy namespace boost { class bad_lexical_cast; template<typename Target, typename Source> Target lexical_cast(const Source& arg); template <typename Target> Target lex

Linux Boost 安装, 测试程序

下载: wget http://101.96.10.75/ncu.dl.sourceforge.net/project/boost/boost/1.62.0/boost_1_62_0.tar.bz2 tar xf boost_1_62_0.tar.bz2  cd boost_1_62_0/ 编译安装 bash bootstrap.sh  echo $? ./b2 echo $? sudo ./b2 install --prefix=/tmp/haha  #/tmp/haha是我建立的目录 ech

c++11实现一个简单的lexical_cast

boost中有一个lexical_cast可以用统一的方式来做基本类型之间的转换,比如字符串到数字,数字到字符串,bool和字符串及数字之间的相互转换.boost::lexical_cast的用法比较简单: #include <boost/lexical_cast.hpp> #include <iostream> #include <string> #define ERROR_LEXICAL_CAST 1 int main() { using boost::lexica

boost的property_tree组件

1.1 缘起 stl中对线性表有充分的实现,无论是vector还是list都是典型的线性表,即便是set和map,尽管实现上采用了诸如红黑树之类的树形结构,但那仅仅是为了快速检索的需要,从语义上来说它们依旧是线性表,无法表达目录树这种树形结构.boost中的property_tree可以看做是对树形结构实现的补充,我们大可把它扩展应用到各种需要树形结构的地方. 当我们拥有了一个树性结构以后,那么也就同时拥有了树形结构中的每个节点的访问权,很自然的,我们希望每个节点都可以方便的检索(类似于输入一个