C++知識積累:stringstream使用
阿新 • • 發佈:2019-01-06
< sstream > 定義了三個類:istringstream、ostringstream 和 stringstream,分別用來進行流的輸入、輸出和輸入輸出操作。本文以 stringstream 為主,介紹流的輸入和輸出操作。
< sstream > 主要用來進行資料型別轉換,由於 < sstream > 使用 string 物件來代替字元陣列(snprintf方式),就避免緩衝區溢位的危險;而且,因為傳入引數和目標物件的型別會被自動推匯出來,所以不存在錯誤的格式化符的問題。簡單說,相比c庫的資料型別轉換而言,< sstream > 更加安全、自動和直接。
stringstream主要常用語以下幾點:
簡化資料型別轉換
#include <string> #include <sstream> #include <iostream> #include <stdio.h> using namespace std; int main() { stringstream sstream; string strResult; int nValue = 1000; // 將int型別的值放入輸入流中 sstream << nValue; // 從sstream中抽取前面插入的int型別的值,賦給string型別 sstream >> strResult; cout << "[cout]strResult is: " << strResult << endl; return 0; }
執行結果如圖:
需要注意的是,多次轉化時每次轉化前應當先將sstream清空,清空使用sstream.clear()。
與sring的相互轉換
可以直接將stringstream以string形式輸出,如圖所示:
與cin相類比
stringstream可以實現類似cin的功能,如圖所示:
從ss>>中讀取a,str,b的方法與cin>>相同,讀取到空格的時候結束。
此外,還可以使用getline(),如圖所示:
程式通過ss<<“Hello world!”;將“Hello world!”輸入到流中,然後getline(ss,a)就可以直接從ss流中進行資料讀取,讀取的原則與getline(cin,a)相同,如果“Hello world!”變成“Hello \nworld!”,那麼最終得到的a即是“Hello ”,具體應用可見 LeetCode 297 二叉樹的序列化與反序列化