青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

doing5552

記錄每日點滴,不枉人生一世

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  73 Posts :: 0 Stories :: 94 Comments :: 0 Trackbacks

公告

常用鏈接

留言簿(24)

我參與的團隊

最新隨筆

搜索

  •  

積分與排名

  • 積分 - 456264
  • 排名 - 49

最新隨筆

最新評論

閱讀排行榜

評論排行榜

本文來自】http://www.builder.com.cn/2003/0304/83250.shtml
http://www.shnenglu.com/alantop/archive/2007/07/10/27823.html
使用stringstream對象簡化類型轉(zhuǎn)換
C++標(biāo)準(zhǔn)庫中的<sstream>提供了比ANSI C的<stdio.h>更高級的一些功能,即單純性、類型安全和可擴展性。在本文中,我將展示怎樣使用這些庫來實現(xiàn)安全和自動的類型轉(zhuǎn)換。

為什么要學(xué)習(xí)

如果你已習(xí)慣了<stdio.h>風(fēng)格的轉(zhuǎn)換,也許你首先會問:為什么要花額外的精力來學(xué)習(xí)基于<sstream>的類型轉(zhuǎn)換呢?也許對下面一個簡單的例子的回顧能夠說服你。假設(shè)你想用sprintf()函數(shù)將一個變量從int類型轉(zhuǎn)換到字符串類型。為了正確地完成這個任務(wù),你必須確保證目標(biāo)緩沖區(qū)有足夠大空間以容納轉(zhuǎn)換完的字符串。此外,還必須使用正確的格式化符。如果使用了不正確的格式化符,會導(dǎo)致非預(yù)知的后果。下面是一個例子:

int n=10000;

chars[10];

sprintf(s,”%d”,n);// s中的內(nèi)容為“10000”

到目前為止看起來還不錯。但是,對上面代碼的一個微小的改變就會使程序崩潰:

int n=10000;

char s[10];

sprintf(s,”%f”,n);// 看!錯誤的格式化符

在這種情況下,程序員錯誤地使用了%f格式化符來替代了%d。因此,s在調(diào)用完sprintf()后包含了一個不確定的字符串。要是能自動推導(dǎo)出正確的類型,那不是更好嗎?

進入stringstream

由于ns的類型在編譯期就確定了,所以編譯器擁有足夠的信息來判斷需要哪些轉(zhuǎn)換。<sstream>庫中聲明的標(biāo)準(zhǔn)類就利用了這一點,自動選擇所必需的轉(zhuǎn)換。而且,轉(zhuǎn)換結(jié)果保存在stringstream對象的內(nèi)部緩沖中。你不必擔(dān)心緩沖區(qū)溢出,因為這些對象會根據(jù)需要自動分配存儲空間。

你的編譯器支持<sstream>嗎?

<sstream>庫是最近才被列入C++標(biāo)準(zhǔn)的。(不要把<sstream>與標(biāo)準(zhǔn)發(fā)布前被刪掉的<strstream>弄混了。)因此,老一點的編譯器,如GCC2.95,并不支持它。如果你恰好正在使用這樣的編譯器而又想使用<sstream>的話,就要先對它進行升級更新。

<sstream>庫定義了三種類:istringstream、ostringstream和stringstream,分別用來進行流的輸入、輸出和輸入輸出操作。另外,每個類都有一個對應(yīng)的寬字符集版本。簡單起見,我主要以stringstream為中心,因為每個轉(zhuǎn)換都要涉及到輸入和輸出操作。

注意,<sstream>使用string對象來代替字符數(shù)組。這樣可以避免緩沖區(qū)溢出的危險。而且,傳入?yún)?shù)和目標(biāo)對象的類型被自動推導(dǎo)出來,即使使用了不正確的格式化符也沒有危險。

string到int的轉(zhuǎn)換

string result=”10000”;
int n=0;
stream<<result;
stream>>n;//n等于10000

重復(fù)利用stringstream對象

如果你打算在多次轉(zhuǎn)換中使用同一個stringstream對象,記住再每次轉(zhuǎn)換前要使用clear()方法;

在多次轉(zhuǎn)換中重復(fù)使用同一個stringstream(而不是每次都創(chuàng)建一個新的對象)對象最大的好處在于效率。stringstream對象的構(gòu)造和析構(gòu)函數(shù)通常是非常耗費CPU時間的。

在類型轉(zhuǎn)換中使用模板

你可以輕松地定義函數(shù)模板來將一個任意的類型轉(zhuǎn)換到特定的目標(biāo)類型。例如,需要將各種數(shù)字值,如int、long、double等等轉(zhuǎn)換成字符串,要使用以一個string類型和一個任意值t為參數(shù)的to_string()函數(shù)。to_string()函數(shù)將t轉(zhuǎn)換為字符串并寫入result中。使用str()成員函數(shù)來獲取流內(nèi)部緩沖的一份拷貝:

template<class T>

void to_string(string & result,const T& t)

{

 ostringstream oss;//創(chuàng)建一個流

oss<<t;//把值傳遞如流中

result=oss.str();//獲取轉(zhuǎn)換后的字符轉(zhuǎn)并將其寫入result
}

這樣,你就可以輕松地將多種數(shù)值轉(zhuǎn)換成字符串了:

to_string(s1,10.5);//double到string

to_string(s2,123);//int到string

to_string(s3,true);//bool到string

可以更進一步定義一個通用的轉(zhuǎn)換模板,用于任意類型之間的轉(zhuǎn)換。函數(shù)模板convert()含有兩個模板參數(shù)out_type和in_value,功能是將in_value值轉(zhuǎn)換成out_type類型:

template<class out_type,class in_value>

out_type convert(const in_value & t)

{

stringstream stream;

stream<<t;//向流中傳值

out_type result;//這里存儲轉(zhuǎn)換結(jié)果

stream>>result;//向result中寫入值

return result;

}

這樣使用convert():

double d;

string salary;

string s=”12.56”;

d=convert<double>(s);//d等于12.56

salary=convert<string>(9000.0);//salary等于”9000”

結(jié)論

 

在過去留下來的程序代碼和純粹的C程序中,傳統(tǒng)的<stdio.h>形式的轉(zhuǎn)換伴隨了我們很長的一段時間。但是,如文中所述,基于stringstream的轉(zhuǎn)換擁有類型安全和不會溢出這樣搶眼的特性,使我們有充足得理由拋棄<stdio.h>而使用<sstream>。<sstream>庫還提供了另外一個特性—可擴展性。你可以通過重載來支持自定義類型間的轉(zhuǎn)換。

一些實例:

stringstream通常是用來做數(shù)據(jù)轉(zhuǎn)換的。

相比c庫的轉(zhuǎn)換,它更加安全,自動和直接。

 

例子一:基本數(shù)據(jù)類型轉(zhuǎn)換例子 int轉(zhuǎn)string

 

#include <string>
#
include <sstream>
#
include <iostream> 

int main()
{
    std
::stringstream stream;
    std
::string result;
    int i 
= 1000;
    stream 
<< i; //將int輸入流
    stream >> result; //從stream中抽取前面插入的int值
    std::cout << result << std::endl; // print the string "1000"

 

 

運行結(jié)果:

001

 

例子二:除了基本類型的轉(zhuǎn)換,也支持char *的轉(zhuǎn)換。

 

#include <sstream>
#
include <iostream> 

int main()
{
    std
::stringstream stream;
    char result[
8] ;
    stream 
<< 8888//向stream中插入8888
    stream >> result; //抽取stream中的值到result
    std::cout << result << std::endl; // 屏幕顯示 "8888"

 

 

002

 

例子三:再進行多次轉(zhuǎn)換的時候,必須調(diào)用stringstream的成員函數(shù)clear().

 

#include <sstream>
#
include <iostream>
int main()
{
    std
::stringstream stream;
    int first
, second;
    stream
<< "456"//插入字符串
    stream >> first; //轉(zhuǎn)換成int
    std::cout << first << std::endl;
    stream
.clear(); //在進行多次轉(zhuǎn)換前,必須清除stream
    stream << true//插入bool值
    stream >> second; //提取出int
    std::cout << second << std::endl;

 

運行clear的結(jié)果

003

沒有運行clear的結(jié)果

004

posted on 2009-01-05 20:31 doing5552 閱讀(617) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            99精品国产在热久久婷婷| 国产精品久久久久av| 国产精品一区二区在线观看网站 | 亚洲国产高清高潮精品美女| 亚洲一区二区三区免费观看 | 国产欧美一区二区白浆黑人| 一片黄亚洲嫩模| 欧美激情无毛| 欧美一级久久久久久久大片| 国产精品久久亚洲7777| 一区二区高清| 亚洲美女性视频| 欧美另类久久久品| 亚洲精品极品| 亚洲精品视频二区| 欧美日韩精品综合| 亚洲永久精品国产| 亚洲欧美日本另类| 国产日韩综合| 久久久视频精品| 久久大逼视频| 亚洲网站视频福利| 国产精品入口日韩视频大尺度| 亚洲欧美另类久久久精品2019| 91久久精品国产91性色tv| 免费成人av| 一本色道婷婷久久欧美| 亚洲美女少妇无套啪啪呻吟| 久久一区国产| 亚洲精品无人区| 日韩午夜精品视频| 国产精品视频一| 久久精品一区中文字幕| 久久一区二区三区超碰国产精品| 亚洲黑丝在线| 妖精成人www高清在线观看| 国产麻豆精品视频| 男女激情视频一区| 欧美乱妇高清无乱码| 亚洲综合导航| 欧美在线播放一区二区| 亚洲国产精品电影在线观看| 亚洲精品国产精品乱码不99按摩| 国产精品yjizz| 久久米奇亚洲| 欧美日韩一区二区视频在线 | 国产精品国产三级国产aⅴ无密码| 午夜视频在线观看一区二区| 久久精品国产亚洲高清剧情介绍| 亚洲欧洲日产国产网站| 亚洲自拍偷拍一区| 亚洲人体偷拍| 欧美一区视频| 亚洲免费成人av电影| 午夜免费久久久久| 一区二区高清| 裸体素人女欧美日韩| 欧美在线免费观看视频| 久久久久国产精品厨房| 欧美国产日本高清在线| 午夜久久一区| 蜜桃av综合| 久久精品国产清高在天天线| 亚洲欧美日韩一区二区在线| 在线观看日韩欧美| 亚洲欧美成人一区二区三区| 亚洲激情图片小说视频| 性色一区二区三区| 亚洲婷婷综合色高清在线| 久久亚洲一区| 久久亚洲一区二区| 国产欧美日韩视频| 夜夜嗨av一区二区三区中文字幕 | 蜜桃av一区| 国产精品一区二区你懂的| 99re66热这里只有精品3直播| 亚洲国产精品久久久久婷婷老年| 午夜精品一区二区三区四区| 亚洲一区二区日本| 欧美成人伊人久久综合网| 每日更新成人在线视频| 国产精品一区二区三区乱码| 一区二区三区精品视频在线观看| 亚洲激情成人网| 男人的天堂亚洲在线| 免费亚洲网站| 亚洲黑丝一区二区| 欧美高清视频在线| 欧美黄色精品| 亚洲国产高潮在线观看| 免费在线欧美黄色| 欧美国产一区二区| 亚洲人体一区| 欧美精品久久久久久久| 亚洲美女色禁图| 亚洲免费视频网站| 国产精品久久久久久久午夜| 亚洲一本视频| 欧美国产视频一区二区| 亚洲免费一级电影| 亚洲国产精品美女| 国产精品久久久久久福利一牛影视 | 国产在线不卡| 欧美777四色影视在线| 一本色道**综合亚洲精品蜜桃冫| 久久精品中文字幕免费mv| 亚洲国产激情| 国产精品美女诱惑| 久久综合中文字幕| 亚洲一卡二卡三卡四卡五卡| 欧美成人精品h版在线观看| 在线视频你懂得一区| 国产主播在线一区| 欧美午夜在线视频| 欧美99久久| 欧美一区二区三区精品| 亚洲人成网站在线观看播放| 久久国产精品99精品国产| 亚洲精品孕妇| 黄色国产精品一区二区三区| 欧美视频精品一区| 麻豆精品视频| 先锋a资源在线看亚洲| 亚洲精品免费看| 免费欧美日韩| 久久九九有精品国产23| 亚洲女爱视频在线| 亚洲精品一区二区三区av| 国内自拍亚洲| 国产欧美日韩不卡| 国产精品成人免费| 欧美—级在线免费片| 久久深夜福利免费观看| 香蕉av福利精品导航| 一区二区三区产品免费精品久久75 | 亚洲国产影院| 国内精品视频久久| 国产精品手机视频| 国产精品xnxxcom| 欧美日韩中文| 国产精品成人播放| 国产精品户外野外| 欧美日韩亚洲91| 欧美日韩国产精品一区二区亚洲| 欧美大片在线看| 欧美激情视频给我| 欧美激情黄色片| 欧美sm视频| 欧美国产精品人人做人人爱| 免费成年人欧美视频| 欧美不卡一区| 欧美剧在线观看| 欧美日韩精品免费| 国产精品成人国产乱一区 | 久久精品国产第一区二区三区| 亚洲欧美另类久久久精品2019| 亚洲欧美日韩综合aⅴ视频| 亚洲尤物在线| 久久精品五月婷婷| 久久最新视频| 欧美日韩国产综合在线| 国产精品毛片va一区二区三区 | 国产精品久久福利| 国产精品推荐精品| 国产一区二区三区在线观看视频| 黄色av日韩| 一本不卡影院| 欧美一区午夜精品| 老司机精品久久| 亚洲国产欧美一区| 一区二区久久| 欧美一级理论片| 欧美国产日韩一区| 国产精品久久久久国产精品日日| 国产一区二区三区视频在线观看| 影音先锋成人资源站| 日韩午夜一区| 久久成人久久爱| 欧美高清影院| 亚洲淫性视频| 欧美aⅴ99久久黑人专区| 欧美日韩裸体免费视频| 国产一区二区精品久久99| 亚洲国产女人aaa毛片在线| 一区二区电影免费在线观看| 久久久国产精品一区二区三区| 亚洲第一搞黄网站| 亚洲男女毛片无遮挡| 免费91麻豆精品国产自产在线观看| 欧美午夜视频在线| 亚洲国产三级网| 欧美一级一区| 亚洲综合社区| 欧美电影免费网站| 性欧美长视频| 欧美日韩国产综合视频在线观看中文 | 99在线|亚洲一区二区| 久久精品免费| 日韩亚洲欧美一区二区三区| 久久国产精品亚洲va麻豆|