久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1723|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

字節(jié)流類

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:107189 發(fā)表于 2016-3-5 18:16 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式


字節(jié)流可直接與內(nèi)存而不是與文件或標(biāo)準(zhǔn)輸出一起工作。我們可以用與標(biāo)準(zhǔn)輸出同樣的格式,操作內(nèi)存里的數(shù)據(jù)(字節(jié))。如果我們想把數(shù)據(jù)放入字節(jié)流,可以建立一個(gè)ostrstream對(duì)象;如果想從字節(jié)流中提取數(shù)據(jù),就建立一個(gè)istrstream對(duì)象。

12.3.1 輸入流
   istrstream類支持一個(gè)字符數(shù)組作為源的輸入流。在構(gòu)造istrstream對(duì)象前,必須存在一個(gè)字符數(shù)組,而且這個(gè)數(shù)組中已經(jīng)填充了我們想要提取的字符。下面是兩個(gè)構(gòu)造函數(shù)的原型:
   istrstream::istrstream(char* buf);
   istrstream::istrstream(char* buf, int size);
   第一個(gè)構(gòu)造函數(shù)取一個(gè)指向以"{content}"作為結(jié)尾符的字符數(shù)組的指針,我們可以提取字節(jié)直至遇到"{content}"為止。第二個(gè)構(gòu)造函數(shù)還需要這個(gè)數(shù)組的大小,但不需要數(shù)組包含字符串的結(jié)尾符"{content}",我們可以一直提取字節(jié)到buf[size-1],而不管是否遇到"{content}"。
       
程序段         程序12-17
#include "strstrea.h"
//使用strstream要包含頭文件strstrea.h
//這個(gè)文件名很奇怪,這是因?yàn)镈OS文件命名規(guī)則的限制。

void main()
{
  int n;
  float f;
  char buf[80];
  istrstream arg("3.14159 hello");
  arg>>n>>f>>buf;
  cout<<"n="<<n<<endl;
  cout<<"f="<<f<<endl;
  cout<<"buf="<<buf<<endl;
}
   程序的運(yùn)行結(jié)果是:
   n=3
   f=0.14159
   buf=hello
   在程序中變量n提取到的是3,變量f提取到的是0.14159,這說明抽取不僅依賴于空白的分隔符,還依賴于提取的數(shù)據(jù)類型。同時(shí),程序中也會(huì)出現(xiàn)前面提到的問題。例如:
   istrstream arg("3.14159 hello world!");
的運(yùn)行結(jié)果并不是想象中那樣,把"hello world!"被抽取到buf中,僅僅是hello被抽取。
   如果該輸入流定義為:
   istrstream arg("3.14159 hello",10);
強(qiáng)制限定字符數(shù)組元素個(gè)數(shù)為10,則程序運(yùn)行結(jié)果為:
   n=3
   f=0.14159
   buf=he



12.3.2 輸出流
   ostrstream類支持一個(gè)字符數(shù)組作為數(shù)據(jù)傳輸目的地的輸出流,它可以使用我們?yōu)樗暾?qǐng)的存儲(chǔ)空間,這時(shí)字節(jié)在內(nèi)存中被格式化;也可以使用自動(dòng)分配的存儲(chǔ)空間。
   我們?yōu)閛strstream申請(qǐng)存儲(chǔ)空間的方法是通過ostrstream有參的構(gòu)造函數(shù):
   ostrstream(char*, int, int=ios::out);
   第一個(gè)參數(shù)是緩沖區(qū)的指針,第二個(gè)參數(shù)是緩沖區(qū)的大小,第三個(gè)參數(shù)是打開模式。如果是缺省的模式,則從緩沖區(qū)頭部開始添加新的字符;如果打開模式是ios::ate或ios::app,則從緩沖區(qū)中的字符串的結(jié)尾符處開始添加新的字符 (結(jié)尾符不后移,只是被簡(jiǎn)單地覆蓋,下面程序中os<<ends的作用就是在buf后面加上結(jié)尾符)。

下面是一個(gè)使用istrstream的例子:
程序段         程序12-18
#include "strstrea.h"
void main()
{
  int n;
  float f;
  char buf[80];
  ostrstream os(buf,80);
  cin>>n>>f;
  os<<"n="<<n<<endl;
  os<<"f="<<f<<endl;
  os<<ends;
  cout<<buf;
}
   程序的運(yùn)行結(jié)果是:
   n=3
   f=0.14159
   如果使用自動(dòng)分配存儲(chǔ)空間的方法,則使用無參的構(gòu)造函數(shù):
   ostrstream os;
   這時(shí)對(duì)象os在堆中分配一塊存儲(chǔ)空間,并自己維護(hù)。當(dāng)用戶輸入不斷增加,原存儲(chǔ)塊不夠用時(shí),它可以再分配更多的存儲(chǔ)空間。用戶可以通過調(diào)用成員函數(shù)rdbuf()返回緩沖區(qū)指針,以訪問緩沖區(qū)的內(nèi)容。

ostrstream類支持一個(gè)字符數(shù)組作為數(shù)據(jù)傳輸目的地的輸出流,它可以使用我們?yōu)樗暾?qǐng)的存儲(chǔ)空間,這時(shí)字節(jié)在內(nèi)存中被格式化;也可以使用自動(dòng)分配的存儲(chǔ)空間。
   我們?yōu)閛strstream申請(qǐng)存儲(chǔ)空間的方法是通過ostrstream有參的構(gòu)造函數(shù):
   ostrstream(char*, int, int=ios::out);
   當(dāng)插入操作超過申請(qǐng)的存儲(chǔ)空間的小時(shí),流的bad標(biāo)志會(huì)置位。
   如果使用自動(dòng)分配存儲(chǔ)空間的方法,則使用無參的構(gòu)造函數(shù):
   ostrstream os;
   當(dāng)不知道數(shù)據(jù)需要多少空間時(shí),這是一種很好的方法。這時(shí)對(duì)象os在堆中分配一塊存儲(chǔ)空間,并自己維護(hù)。當(dāng)用戶輸入不斷增加,原存儲(chǔ)塊不夠用時(shí),如果有必要,它將移動(dòng)存儲(chǔ)塊以分配更多的存儲(chǔ)空間。用戶可以通過調(diào)用成員函數(shù)rdbuf()返回緩沖區(qū)指針,以訪問緩沖區(qū)的內(nèi)容。但是有一個(gè)問題:當(dāng)空間不夠,流對(duì)象自己移動(dòng)存儲(chǔ)塊以分配更多空間時(shí),原來的緩沖區(qū)指針已經(jīng)失效,但是用戶是不知道的,因?yàn)榱鲗?duì)象自己負(fù)責(zé)維護(hù)存儲(chǔ)空間。ostrstream處理這個(gè)問題的方法是"凍結(jié)"自己。用戶通過str()函數(shù)返回指向輸出流內(nèi)容的字符數(shù)組的指針,并將自己"凍結(jié)"。用戶不能再它添加字符,ostrstream對(duì)象也不再負(fù)責(zé)存儲(chǔ)空間的自動(dòng)釋放,必須由用戶自己清理存儲(chǔ)器:
   delete os.str();
   如果想添加更多的字符,一般的做法是新建一個(gè)ostrstream,將舊的流灌入新流中,并向新流添加字符。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 天天狠狠| 欧美日韩国产三级 | 中文字幕伊人 | 精品久久精品 | 亚洲成人综合网站 | 日韩一区二区久久 | 国产毛片毛片 | 国产精品成人一区二区三区 | 亚洲精品国产区 | 久久精品国产一区 | 国产精品视频免费观看 | 国产精品乱码一区二区三区 | 亚洲精品自在在线观看 | 午夜影院在线观看 | av黄色在线 | 一区二区三区免费 | 久久久久久高潮国产精品视 | 久久综合久久久 | 欧美一区二区在线观看 | 欧美日韩三级在线观看 | 久久久精品网 | 高清一区二区三区 | 久久1区 | 国产综合网站 | 91精品一区 | 日韩欧美中文 | 欧美视频三区 | 国产精品麻 | 亚洲欧美成人影院 | 在线视频一区二区 | 一级一片在线观看 | 日韩精品免费一区 | 欧美一级片在线观看 | 国产伦精品一区二区三区视频金莲 | 国产黄色大片在线观看 | 精品美女久久久久久免费 | 在线观看国产91 | 99精品网 | 欧美久久精品一级c片 | 亚洲小说图片 | 国产成人精品一区二区三区视频 |