C++ Boost实现数字与字符串转化详解

目录
  • 一、引言
  • 二、Boost.LexicalCast
    • 2.1 示例1
    • 2.2 示例2
  • 三、lexical_cast与c/c++提供类似接口的比较
    • 3.1 两者比较
    • 3.2 样例

一、引言

在boost库中,有一个函数Boost.LexicalCast可以将数字和字符串进行双向转换。本文介绍这种用法的案例。

二、Boost.LexicalCast

Boost.LexicalCast 提供了一个转换运算符,boost::lexical_cast,它可以将数字从字符串转换为数字类型,例如 int 或 double ,反之亦然。 boost::lexical_cast 是 std::stoi()、std::stod() 和 std::to_string() 等函数的替代方案,这些函数已添加到 C++11 的标准库中。

2.1 示例1

使用boost::lexical_cast

#include <boost/lexical_cast.hpp>
#include <string>
#include <iostream>
int main()
{
  std::string s = boost::lexical_cast<std::string>(123);
  std::cout << s << '\n';
  double d = boost::lexical_cast<double>(s);
  std::cout << d << '\n';
}

转换运算符 boost::lexical_cast 可以转换不同类型的数字。示例 6.1 首先将整数 123 转换为字符串,然后将字符串转换为浮点数。要使用 boost::lexical_cast,请包含头文件 boost/lexical_cast.hpp。

boost::lexical_cast 在内部使用流来执行转换。因此,只能转换具有重载运算符<< 和运算符>> 的类型。但是,可以针对某些类型优化 boost::lexical_cast 以实现更有效的转换。

2.2 示例2

boost::bad_lexical_cast当出错时

#include <boost/lexical_cast.hpp>
#include <string>
#include <iostream>
int main()
{
  try
  {
    int i = boost::lexical_cast<int>("abc");
    std::cout << i << '\n';
  }
  catch (const boost::bad_lexical_cast &e)
  {
    std::cerr << e.what() << '\n';
  }
}

如果转换失败,则会抛出从 std::bad_cast 派生的 boost::bad_lexical_cast 类型的异常。示例 2 引发异常,因为字符串“abc”无法转换为 int 类型的数字。

三、lexical_cast与c/c++提供类似接口的比较

3.1 两者比较

标准c家族中包含此类函数,例如atoi与itoa等,它们的缺点是:

(1)各个转换都是单向的,双向转换为不同函数,各种转换函数不同,接口众多;

(2)仅支持基础数据类型的子集,如int,long,double;

(3)不能提供统一的接口,易用性差;

c++中提供了stringstream,使用它进行格式转换可读性较差,使用起点较高,只是简单的转换,stringstream太重量级。

boost提供了lexical_cast,使用统一接口形式实现任意类型之间的转换,增强了易用性。但如果需要严密控制精度的转换,仍然推荐使用stringstream;数值之间的转换,推荐使用numeric_cast。

3.2 样例

#include "iostream"
#include "boost/lexical_cast.hpp" // 需要包含的头文件
using boost::lexical_cast;
using boost::bad_lexical_cast;
using namespace std;
int main()
{
    char* p="32768";
    int i=0;
    try
    {
        i=lexical_cast<int>(p); // 将字符串转化为整数
    }
    catch(bad_lexical_cast&)    // 转换失败会抛出一个异常
    {
        i=0;
    }
    cout << i << endl;
    return i;
}

到此这篇关于C++ Boost实现数字与字符串转化详解的文章就介绍到这了,更多相关C++数字与字符串转化内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++ Boost shared_ptr共享指针详细讲解

    目录 一.提要 二.智能指针boost::shared_ptr与boost::scoped_ptr 三.智能指针 boost::shared_ptr用法 示例1 示例2 示例3 示例4 示例5 一.提要 boost::shared_ptr是另一个智能指针,与 boost::scoped_ptr有很大不同,本文阐述这种区别. 二.智能指针boost::shared_ptr与boost::scoped_ptr 主要区别在于: boost::shared_ptr 不一定是对象的独占所有者. 所有权可以

  • C++ Boost weak_ptr智能指针超详细讲解

    目录 一.提要 二.特别智能指针(Special Smart Pointers) 一.提要 在 C++11 中,boost::weak_ptr是另一类智能指针,一般是用COM组件生成.调用,本文阐述这种指针的特点和用法. 二.特别智能指针(Special Smart Pointers) 到目前为止介绍的每个智能指针都可以在不同的场景中单独使用.但是,boost::weak_ptr 仅在与 boost::shared_ptr 结合使用时才有意义. boost::weak_ptr 在 boost/w

  • C++ Boost Thread线程使用示例详解

    目录 一.并行编程 二.生成何管理Threads 练习 一.并行编程 以下库支持并行编程模型. Boost.Thread 允许您创建和管理自己的线程. Boost.Atomic 允许您通过多个线程的原子操作访问整数类型的变量. Boost.Lockfree 提供线程安全的容器. Boost.MPI 起源于超级计算机领域.使用 Boost.MPI,您的程序可以多次启动并在多个进程中执行.您专注于对应该并发执行的实际任务进行编程,而 Boost.MPI 会协调这些过程.使用 Boost.MPI,您无

  • C++ Boost PointerContainer智能指针详解

    目录 一.提要 二.智能指针Boost.PointerContainer 三.练习 一.提要 在 C++11 中,Boost.PointerContainer是另一个智能指针,一般是用来生成集合数据的,本文阐述这种指针的特点和用法. 二.智能指针Boost.PointerContainer 库 Boost.PointerContainer 提供专门用于管理动态分配对象的容器.例如,在 C++11 中,您可以使用 std::vector<std::unique_ptr<int>> 创

  • C++ boost scoped_ptr智能指针详解

    目录 一.智能指针-唯一所有者 二.接口类分析 一.智能指针-唯一所有者 boost::scoped_ptr 是一个智能指针,它是动态分配对象的唯一所有者. boost::scoped_ptr 无法复制或移动.此智能指针在头文件 boost/scoped_ptr.hpp 中定义. 二.接口类分析 scoped_array 分析 scoped_array 的类部分原始代码如下: template<class T> class scoped_array // noncopyable { priva

  • C++ Boost StringAlgorithms超详细讲解

    目录 一.提要 二.简化字符串处理的工具和其库 三.应用Boost.StringAlgrithms库 3.1 字符大小写 3.2 删除字符串内子串 3.3 查找字符串内子串 3.4 合并字符串 3.5 子串替换 3.6 字符串修剪 3.7 创立谓词 3.8 比较 3.9 拆分字符串 3.10 查找字符串 练习 一.提要 boost C++对应的字符串对象也有一套标准操作方法.本文介绍库Boost.StringAlgorithms的若干函数和功能示例. 二.简化字符串处理的工具和其库 Boost.

  • C++ Boost ScopeExit超详细讲解

    目录 一.提要 二.退出作用域(Boost.ScopeExit) 2.1 范例1.UsingBOOST_SCOPE_EXIT 2.2 示例2.Boost.ScopeExit和C++11的lambda函数 2.3 示例3.特点BOOST_SCOPE_EXIT 三.练习 一.提要 资源有很多种,每种都封装一套,还是挺繁琐的!对于比较少使用或者一个程序很可能只会用一次的资源,我们不想封装,在这种情况下用Boost.ScopeExit. 二.退出作用域(Boost.ScopeExit) 库 Boost.

  • C++ Boost实现数字与字符串转化详解

    目录 一.引言 二.Boost.LexicalCast 2.1 示例1 2.2 示例2 三.lexical_cast与c/c++提供类似接口的比较 3.1 两者比较 3.2 样例 一.引言 在boost库中,有一个函数Boost.LexicalCast可以将数字和字符串进行双向转换.本文介绍这种用法的案例. 二.Boost.LexicalCast Boost.LexicalCast 提供了一个转换运算符,boost::lexical_cast,它可以将数字从字符串转换为数字类型,例如 int 或

  • C++ Boost.Range与Adapters库使用详解

    目录 一.说明 二.适配器 练习 一.说明 本节叙述关于Boost.Range和Adeptor两个内容. Boost.Range 是一个库,乍一看,它提供的算法类似于标准库提供的算法.例如,您会发现函数 boost::copy(),它的作用与 std::copy() 相同.但是, std::copy() 需要两个参数,而 boost::copy() 需要一个范围. 二.适配器 标准库提供了几种可以传递谓词的算法.例如,传递给 std::count_if() 的谓词确定计算哪些元素. Boost.

  • Javascript类型系统之String字符串类型详解

    javascript没有表示单个字符的字符型,只有字符串String类型,字符型相当于仅包含一个字符的字符串 字符串String是javascript基本数据类型,同时javascript也支持String对象,它是一个原始值的包装对象.在需要时,javascript会自动在原始形式和对象形式之间转换.本文将介绍字符串String原始类型及String包装对象 定义 字符串String类型是由引号括起来的一组由16位Unicode字符组成的字符序列 字符串类型常被用于表示文本数据,此时字符串中的

  • Java 比较字符串实例详解

     Java 比较字符串实例详解 公司让实现一个自动清除1小时内数据,SQL不熟悉,无奈之下,只能本地DB存储当前时间+小时去和当前时间进行比对.折腾好半天,突然想到Java提供了一个方法,也是进行字符串比较的,傻眼了.一起来看看吧~ CompareTo()方法简介 首先,它属于java.lang.String包下,是Java提供的一个字符串比较的方法,详情介绍如下: CompareTo()返回值: int 返回值类型分别有三种,小于0,等于0,大于0 1. 如果字符串相等返回值0: 2. 如果第

  • MySQL字符串函数详解(推荐)

    一.ASCII ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL,返回NULL. 二.ORD ORD(str) 如果字符串str最左面字符是一个多字节字符,通过以格式((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code...]返回字符的ASCII代码值来返回多字节字符代码.如果最左面的字符不是一个多字节字符.返回与A

  • Python基础之字符串格式化详解

    一.前言 Python的字符串格式化有两种方式:百分号方式 和 format方式 百分号的方式相对来说比较老, format方式则是相对比较先进,企图替换古老的方式,目前两者都支持. 二.百分号 %[(name)][flags][width].[precision]typecode """ (name) 可选,用于选择指定的key flags 可选,可供选择的值有: + 右对齐:正数前加正好,负数前加负号: - 左对齐:正数前无符号,负数前加负号: 空格 右对齐:正数前加空格

  • C# String字符串案例详解

    string是一种很特殊的数据类型,它既是基元类型又是引用类型,在编译以及运行时,.Net都对它做了一些优化工作,正式这些优化工作有时会迷惑编程人员,使string看起来难以琢磨.这篇文章共四节,来讲讲关于string的陌生一面.  一.恒定的字符串 要想比较全面的了解stirng类型,首先要清楚.Net中的值类型与引用类型. 在C#中,以下数据类型为值类型: bool.byte.char.enum.sbyte以及数字类型(包括可空类型) 以下数据类型为引用类型: class.interface

  • python基础字符串str详解

    目录 字符串str: 编码: ord(字符串)和chr(整数): 字符串字面值: 字符串通用操作 字符串str: 定义:是由一系列字符组成的不可变序列容器,储存的事字符的编码值 编码: 1.字节byte:计算机最小储存单位,等于8位bit 2. 字符:单个的数字,文字与字符 3. 字符集(码表):存储字符与二进制序列的对应关系 4. 编码:将字符转换为对应的二进制序列的过程 5. 解码:将二进制序列转换为对应的字符的过程 6. 编码方式: ASCLL编码:包含英文,数字等字符,每个字符1个字节

  • Python+OpenCV实现信用卡数字识别的方法详解

    目录 一.模板图像处理 二.信用卡图片预处理 一.模板图像处理 (1)灰度图.二值图转化 template = cv2.imread('C:/Users/bwy/Desktop/number.png') template_gray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY) cv_show('template_gray', template_gray) # 形成二值图像,因为要做轮廓检测 ret, template_thresh = cv2.thre

  • Python入门之字符串操作详解

    目录 字符串 字符串常用操作 拼接字符串 字符串复制 计算字符串的长度 截取字符串和获取单个字符 字符串包含判断 常用字符串方法 把字符串的第一个字符大写 统计字符串出现的次数 检查字符串开头 检查字符串结尾 大写转小写 小写转大写 大小写翻转 标题化字符串 空格删除 合并字符串 分割字符串 将字符串按照行分割 判断字符串只是数字 判断是空字符 字符串填充 字符串搜索 字符串替换 格式化字符串 字符串编码转换 字符串 字符串常用操作 拼接字符串 拼接字符串需要使用‘+’运算符可完成对多个字符串的

随机推荐