1. 程式人生 > >C++知識積累:stringstream使用

C++知識積累:stringstream使用

< 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 二叉樹的序列化與反序列化