最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ Boost實(shí)現(xiàn)數(shù)字與字符串轉(zhuǎn)化詳解

 更新時(shí)間:2022年11月16日 09:24:42   作者:無水先生  
Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱

一、引言

在boost庫中,有一個(gè)函數(shù)Boost.LexicalCast可以將數(shù)字和字符串進(jìn)行雙向轉(zhuǎn)換。本文介紹這種用法的案例。

二、Boost.LexicalCast

Boost.LexicalCast 提供了一個(gè)轉(zhuǎn)換運(yùn)算符,boost::lexical_cast,它可以將數(shù)字從字符串轉(zhuǎn)換為數(shù)字類型,例如 int 或 double ,反之亦然。 boost::lexical_cast 是 std::stoi()、std::stod() 和 std::to_string() 等函數(shù)的替代方案,這些函數(shù)已添加到 C++11 的標(biāo)準(zhǔn)庫中。

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';
}

轉(zhuǎn)換運(yùn)算符 boost::lexical_cast 可以轉(zhuǎn)換不同類型的數(shù)字。示例 6.1 首先將整數(shù) 123 轉(zhuǎn)換為字符串,然后將字符串轉(zhuǎn)換為浮點(diǎn)數(shù)。要使用 boost::lexical_cast,請包含頭文件 boost/lexical_cast.hpp。

boost::lexical_cast 在內(nèi)部使用流來執(zhí)行轉(zhuǎn)換。因此,只能轉(zhuǎn)換具有重載運(yùn)算符<< 和運(yùn)算符>> 的類型。但是,可以針對某些類型優(yōu)化 boost::lexical_cast 以實(shí)現(xiàn)更有效的轉(zhuǎn)換。

2.2 示例2

boost::bad_lexical_cast當(dāng)出錯(cuò)時(shí)

#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';
  }
}

如果轉(zhuǎn)換失敗,則會拋出從 std::bad_cast 派生的 boost::bad_lexical_cast 類型的異常。示例 2 引發(fā)異常,因?yàn)樽址?ldquo;abc”無法轉(zhuǎn)換為 int 類型的數(shù)字。

三、lexical_cast與c/c++提供類似接口的比較

3.1 兩者比較

標(biāo)準(zhǔn)c家族中包含此類函數(shù),例如atoi與itoa等,它們的缺點(diǎn)是:

(1)各個(gè)轉(zhuǎn)換都是單向的,雙向轉(zhuǎn)換為不同函數(shù),各種轉(zhuǎn)換函數(shù)不同,接口眾多;

(2)僅支持基礎(chǔ)數(shù)據(jù)類型的子集,如int,long,double;

(3)不能提供統(tǒng)一的接口,易用性差;

c++中提供了stringstream,使用它進(jìn)行格式轉(zhuǎn)換可讀性較差,使用起點(diǎn)較高,只是簡單的轉(zhuǎn)換,stringstream太重量級。

boost提供了lexical_cast,使用統(tǒng)一接口形式實(shí)現(xiàn)任意類型之間的轉(zhuǎn)換,增強(qiáng)了易用性。但如果需要嚴(yán)密控制精度的轉(zhuǎn)換,仍然推薦使用stringstream;數(shù)值之間的轉(zhuǎn)換,推薦使用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); // 將字符串轉(zhuǎn)化為整數(shù)
    }
    catch(bad_lexical_cast&)    // 轉(zhuǎn)換失敗會拋出一個(gè)異常
    {
        i=0;
    }
    cout << i << endl;
    return i;
}

到此這篇關(guān)于C++ Boost實(shí)現(xiàn)數(shù)字與字符串轉(zhuǎn)化詳解的文章就介紹到這了,更多相關(guān)C++數(shù)字與字符串轉(zhuǎn)化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言樹狀數(shù)組的實(shí)例詳解

    C語言樹狀數(shù)組的實(shí)例詳解

    這篇文章主要介紹了C語言樹狀數(shù)組的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • C語言實(shí)現(xiàn)套接字操作的示例代碼

    C語言實(shí)現(xiàn)套接字操作的示例代碼

    在C語言中,套接字(Socket)是一種進(jìn)行網(wǎng)絡(luò)通信的接口,這篇文章就來和大家介紹一下C語言中是如何進(jìn)行套接字操作的,需要的可以參考一下
    2023-06-06
  • C++ 風(fēng)靡一時(shí)的連連看游戲的實(shí)現(xiàn)流程詳解

    C++ 風(fēng)靡一時(shí)的連連看游戲的實(shí)現(xiàn)流程詳解

    游戲“連連看”是源自臺灣的桌面小游戲,自從流入大陸以來風(fēng)靡一時(shí),也吸引眾多程序員開發(fā)出多種版本的“連連看”。這其中,顧芳編寫的“阿達(dá)連連看”以其精良的制作廣受好評,這也成為顧方“阿達(dá)系列軟件”的核心產(chǎn)品。并于2004年,取得國家版權(quán)局的計(jì)算機(jī)軟件登記證書
    2021-11-11
  • C語言簡明講解快速排序的應(yīng)用

    C語言簡明講解快速排序的應(yīng)用

    快速排序由于排序效率在同為O(N*logN)的幾種排序方法中效率較高,因此經(jīng)常被采用,再加上快速排序思想----分治法也確實(shí)實(shí)用,因此很多軟件公司的筆試面試,包括像騰訊,微軟等知名IT公司都喜歡考這個(gè),還有大大小的程序方面的考試如軟考,考研中也常常出現(xiàn)快速排序的身影
    2022-05-05
  • C 語言基礎(chǔ)教程(一)顏色加亮

    C 語言基礎(chǔ)教程(一)顏色加亮

    C 語言基礎(chǔ)教程(一)顏色加亮...
    2007-02-02
  • C語言超詳細(xì)講解結(jié)構(gòu)體與聯(lián)合體的使用

    C語言超詳細(xì)講解結(jié)構(gòu)體與聯(lián)合體的使用

    結(jié)構(gòu)體和聯(lián)合體用于描述事物的屬性,如一只鳥的信息,可能包括它的品種,體重,顏色,年齡等,接下來大家一起來詳細(xì)看看吧
    2022-05-05
  • 關(guān)于C/C++中typedef的定義與用法總結(jié)

    關(guān)于C/C++中typedef的定義與用法總結(jié)

    在C還是C++代碼中,typedef都使用的很多,在C代碼中尤其是多,typedef與#define有些相似,其實(shí)是不同的,特別是在一些復(fù)雜的用法上,需要的朋友可以參考下
    2012-12-12
  • 字符串拷貝函數(shù)memcpy和strncpy以及snprintf 的性能比較

    字符串拷貝函數(shù)memcpy和strncpy以及snprintf 的性能比較

    以下是對字符串拷貝函數(shù)memcpy和strncpy以及snprintf它們之間的性能進(jìn)行了比較,需要的朋友可以過來參考下
    2013-07-07
  • 關(guān)于memcpy和memmove的一點(diǎn)重要說明

    關(guān)于memcpy和memmove的一點(diǎn)重要說明

    下面小編就為大家?guī)硪黄P(guān)于memcpy和memmove的一點(diǎn)重要說明。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • C++ vector如何動態(tài)申請內(nèi)存的元素

    C++ vector如何動態(tài)申請內(nèi)存的元素

    vector是一種動態(tài)數(shù)組,本文主要介紹了C++ vector如何動態(tài)申請內(nèi)存的元素,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論

乌兰察布市| 罗田县| 扬中市| 绥江县| 孝义市| 安化县| 中西区| 丹凤县| 龙海市| 鄄城县| 刚察县| 象州县| 怀集县| 贵溪市| 股票| 中牟县| 奈曼旗| 南丹县| 营山县| 山阴县| 广宁县| 綦江县| 泰来县| 邻水| 普洱| 如东县| 叶城县| 包头市| 航空| 晋州市| 张掖市| 北安市| 南康市| 延吉市| 清丰县| 钟山县| 七台河市| 尚志市| 尼勒克县| 哈巴河县| 绥阳县|