sstream庫的使用

2021-08-20 05:28:04 字數 2329 閱讀 8147

庫定義了三種類:istringstream、ostringstream和stringstream,分別用來進行string流的輸入、輸出和輸入輸出操作。

另外,每個類都有乙個對應的寬字符集版本。

簡單起見,主要以stringstream為中心,因為每個轉換都要涉及到輸入和輸出操作。

注意,使用string物件來代替字元陣列。

這樣可以避免緩衝區溢位的危險。

而且,傳入引數和目標物件的型別被自動推導出來,即使使用了不正確的格式化符也沒有危險。

string result=」10000」;

int n=0;

stream<>n;//n等於10000

重複利用stringstream物件

如果你打算在多次轉換中使用同乙個stringstream物件,記住再每次轉換前要使用clear()方法;

在多次轉換中重複使用同乙個stringstream(而不是每次都建立乙個新的物件)物件最大的好處在於效率。

stringstream物件的構造和析構函式通常是非常耗費cpu時間的。

在型別轉換中使用模板

你可以輕鬆地定義函式模板來將乙個任意的型別轉換到特定的目標型別。例如,需要將各種數字值,如int、long、double等等轉換成字串,要使用以乙個string型別和乙個任意值t為引數的to_string()函式。

to_string()函式將t轉換為字串並寫入result中。

使用str()成員函式來獲取流內部緩衝的乙份拷貝:

template

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

這樣,你就可以輕鬆地將多種數值轉換成字串了:

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

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

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

可以更進一步定義乙個通用的轉換模板,用於任意型別之間的轉換。函式模板convert()含有兩個模板引數out_typein_value,功能是將in_value值轉換成out_type型別:

template

out_type convert(const in_value & t)

這樣使用convert():

double d;

string salary;

string s=」12.56」;

d=convert(s);//d等於12.56

salary=convert(9000.0);//salary等於」9000」

結論

例子一:基本資料型別轉換例子 int轉string

#include 

#include

#include

int main()

例子二:除了基本型別的轉換,也支援char *的轉換。

#include 

#include

int main()

例子三:再進行多次轉換的時候,必須呼叫stringstream的成員函式clear().

#include 

#include

int main()

執行clear的結果

沒有執行clear的結果

注:關於stream.clear()stream.str(""),作用還不太清楚。又說clear是清除標誌位,str("")是清楚stream內容的。但在多次轉換過程是,的確是使用clear才準確,這是驗證過的。

關於sstream的靈活使用

有10000個隊伍參加。經過工作人員認真負責的統計,本來已經統計好了這一萬個隊伍的分數和排名,並按照排名從高到低依次進行了編號 從1到10000 但是由於乙個非常偶然的因素,導致其中三個編號的資料丟失,而且剩餘編號的順序也全被打亂了。你需要編寫乙個程式,根據還保留的統計資料,來判斷哪些編號的資料丟失...

c 標準庫sstream的用法

庫定義了三種類 istringstream ostringstream和stringstream,分別用來進行流的輸入 輸出和輸入輸出操作。另外,每個類都有乙個對應的寬字符集版本。注意,使用string物件來代替字元陣列。這樣可以避免緩衝區溢位的危險。而且,傳入引數和目標物件的型別被自動推導出來,即...

SStream標頭檔案的使用技巧

c 的輸入輸出分為三種 1 基於控制台的i o 2 基於檔案的i o 3 基於字串的i o 1 標頭檔案 cpp view plain copy print?include 2 作用 istringstream類用於執行c 風格的字串流的輸入操作。ostringstream類用於執行c 風格的字串流...