sstream和strstream的用法

2021-08-14 23:23:13 字數 2740 閱讀 8970

在c++有兩種字串流

,也稱為陣列

i/o流,一種在

strstream

中定義,另一種在

sstream

中定義。它們實現的東西基本一樣。

strstream裡包含:

class strstreambuf;

class istrstream;

class ostrstream;

class strstream;

它們是基於c型別字串

char*

編寫的sstream中包含:

class stringbuf;

class istringstream;

class ostringstream;

class stringstream;

它們是基於std::string編寫的

因此ostrstream::str()返回的是

char*

型別的字串

而ostringstream::str()返回的是

std::string

型別的字串

在使用的時候要注意到二者的區別,一般情況下推薦使用std::string型別的字串

當然如果為了保持和c的相容,使用

strstream

也是不錯的選擇。

但要記住一點,strstream雖仍然是

c++語言標準的一部分

,但已被

c++標準宣稱為「

deprecated

」,也就是不再提倡使用了,也說不定以後幹粹就沒了。

先介紹一下sstream

//strigstream流

以空格為邊界符

,使用其須包含

sstream

標頭檔案//istringstream 用法

istringstream istring;

string ss("ss 8346520");

istring.str(ss);

int i=0;

string s;

istring>>s>>i;

cout<

或者istringstream istring("ss 8346520");

int i=0;

string s;

istring>>s>>i;

cout<

都將列印:s內容是

ss,i

內容是8346520

的結果;

//ostringstream 用法

string s="test";

int i=8346520;

int j=0;

string s1;

ostringstream ostring; //

不能寫成ostringstream ostring<

ostring<

cout《流內儲存內容是

test 8346520

istringstream istring(ostring.str());

istring>>s1>>j;//要注意此處的順序

;cout<――――

"<

簡單說說strstream:

基於陣列的類有istrstream、

ostrstream

和strstream

。它們分別用來建立輸入、輸出和輸入/輸出流。這些類的基類之一是

strstreambuf

,它定義了派生類使用的幾個底層的具體屬性。

除了strstreambuf以外,

istream

也是istrstream

的基類。類

ostrstream

包括了類

ostream

。strstream也包括了類

iostream

。所以,所有基於陣列的類和「普通」i/

o類一樣訪問相同的成員函式。

建立基於陣列的輸出流要將乙個輸出流和乙個陣列關聯起來,可使用下列ostream的建構函式:

ostrstream ostr(

char

*buf

,int size

,int mode

=ios

::out

);其中,buf是指向陣列的指標,該陣列接收寫入流的字元。陣列的長度由引數

size

確定。預設時,流以輸出方式開啟,但也可以將幾項或在一起復合為所需的方式(例如,可以包含

ios::

使輸出新增在陣列中已存在的資訊的尾部)。

mode

的預設值可以滿足大多數的要求。一旦開啟了乙個基於陣列的輸出流,所有對這個流的輸出就放在陣列中。但是,任何輸出都不能寫到陣列的限界之外,任何這種企圖都會導致錯誤。

下面是乙個介紹基於陣列的輸出流的簡單程式。

#include

#include

using namespace std;

int main()

使用陣列作輸入:

要將輸入流和陣列關聯起來,可使用下列istrstream的建構函式:

istrstream istr(

char*buf

);其中,buf是指向陣列的指標,該陣列作為每次向流輸入的字元源。

buf所指的陣列必須以空結束。空結束符從不從陣列中讀取。

下面是乙個用字串輸入的例子:

#include

#include

using namespace std;

int main()

sstream操作相關 set和map

我們讀取輸入時一般無法讀取空白字元 空格 換行 tab 但使用getline cin,str 可以讀取一行輸出,獲得的str,我們可以建立乙個stringstream ss str 再讓ss 給其他接受者。這裡的接受者不止可以是string類 甚至可以是int型別的數字 下面是幾道杭電oj的例題 h...

sstream庫的使用

庫定義了三種類 istringstream ostringstream和stringstream,分別用來進行string流的輸入 輸出和輸入輸出操作。另外,每個類都有乙個對應的寬字符集版本。簡單起見,主要以stringstream為中心,因為每個轉換都要涉及到輸入和輸出操作。注意,使用string...

C 中的sstream學習

接下來我們繼續看一下c 風格的串流控制,c 引入了ostringstream istringstream stringstream這三個類,要使用他們建立物件就必須包含sstream.h標頭檔案。istringstream類用於執行c 風格的串流的輸入操作。ostringstream類用於執行c風格...