C++ stringstream類用法詳解
本文主要介紹 C++ 中 stringstream 類的常見(jiàn)用法。
1 概述
<sstream> 定義了三個(gè)類:istringstream、ostringstream 和 stringstream,分別用來(lái)進(jìn)行流的輸入、輸出和輸入輸出操作。本文以 stringstream 為主,介紹流的輸入和輸出操作。
<sstream> 主要用來(lái)進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,由于 <sstream> 使用 string 對(duì)象來(lái)代替字符數(shù)組(snprintf方式),就避免緩沖區(qū)溢出的危險(xiǎn);而且,因?yàn)閭魅雲(yún)?shù)和目標(biāo)對(duì)象的類型會(huì)被自動(dòng)推導(dǎo)出來(lái),所以不存在錯(cuò)誤的格式化符的問(wèn)題。簡(jiǎn)單說(shuō),相比c庫(kù)的數(shù)據(jù)類型轉(zhuǎn)換而言,<sstream> 更加安全、自動(dòng)和直接。
2 代碼示例
2.1 數(shù)據(jù)類型轉(zhuǎn)換
這里展示一個(gè)代碼示例,該示例介紹了將 int 類型轉(zhuǎn)換為 string 類型的過(guò)程。示例代碼(stringstream_test1.cpp)如下:
#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;
printf("[printf]strResult is: %s\n", strResult.c_str());
return 0;
}
編譯并執(zhí)行上述代碼,結(jié)果如下:

2.2 多個(gè)字符串拼接
本示例介紹在 stringstream 中存放多個(gè)字符串,實(shí)現(xiàn)多個(gè)字符串拼接的目的(其實(shí)完全可以使用 string 類實(shí)現(xiàn)),同時(shí),介紹 stringstream 的清空方法。
示例代碼(stringstream_test2.cpp)如下:
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
stringstream sstream;
// 將多個(gè)字符串放入 sstream 中
sstream << "first" << " " << "string,";
sstream << " second string";
cout << "strResult is: " << sstream.str() << endl;
// 清空 sstream
sstream.str("");
sstream << "third string";
cout << "After clear, strResult is: " << sstream.str() << endl;
return 0;
}
編譯并執(zhí)行上述代碼,結(jié)果如下:

從上述代碼執(zhí)行結(jié)果能夠知道:
- 可以使用 str() 方法,將 stringstream 類型轉(zhuǎn)換為 string 類型;
- 可以將多個(gè)字符串放入 stringstream 中,實(shí)現(xiàn)字符串的拼接目的;
- 如果想清空 stringstream,必須使用 sstream.str(""); 方式;clear() 方法適用于進(jìn)行多次數(shù)據(jù)類型轉(zhuǎn)換的場(chǎng)景。詳見(jiàn)示例2.3。
2.3 stringstream的清空
清空 stringstream 有兩種方法:clear() 方法以及 str("") 方法,這兩種方法有不同的使用場(chǎng)景。str("") 方法的使用場(chǎng)景,在上面的示例中已經(jīng)介紹了,這里介紹 clear() 方法的使用場(chǎng)景。示例代碼(stringstream_test3.cpp)如下:
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
stringstream sstream;
int first, second;
// 插入字符串
sstream << "456";
// 轉(zhuǎn)換為int類型
sstream >> first;
cout << first << endl;
// 在進(jìn)行多次類型轉(zhuǎn)換前,必須先運(yùn)行clear()
sstream.clear();
// 插入bool值
sstream << true;
// 轉(zhuǎn)換為int類型
sstream >> second;
cout << second << endl;
return 0;
}
編譯并執(zhí)行上述代碼,結(jié)果如下:

注意:在本示例涉及的場(chǎng)景下(多次數(shù)據(jù)類型轉(zhuǎn)換),必須使用 clear() 方法清空 stringstream,不使用 clear() 方法或使用 str("") 方法,都不能得到數(shù)據(jù)類型轉(zhuǎn)換的正確結(jié)果。下圖分別是未使用 clear() 方法、使用 str("") 方法時(shí)的運(yùn)行結(jié)果:

到此這篇關(guān)于C++ stringstream類用法詳解的文章就介紹到這了,更多相關(guān)C++ stringstream類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易三子棋
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易三子棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
解析c++ 中智能指針引用計(jì)數(shù)為什么不是0原理
這篇文章主要為大家介紹了C語(yǔ)言中智能指針引用計(jì)數(shù)為什么不是0原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
c語(yǔ)言輕松實(shí)現(xiàn)猜數(shù)字小游戲
猜數(shù)字是興起于英國(guó)的益智類小游戲,起源于20世紀(jì)中期,一般由兩個(gè)人或多人玩,也可以由一個(gè)人和電腦玩。游戲規(guī)則為一方出數(shù)字,一方猜,今天我們來(lái)用C實(shí)現(xiàn)這個(gè)游戲案例2022-04-04
c++ chrono 獲取當(dāng)前時(shí)間的實(shí)現(xiàn)代碼
這篇文章主要介紹了c++ chrono 獲取當(dāng)前時(shí)間的實(shí)現(xiàn)代碼,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
你真的理解C語(yǔ)言qsort函數(shù)嗎?帶你深度剖析qsort函數(shù)
這篇文章主要介紹了你真的理解C語(yǔ)言qsort函數(shù)嗎?帶你深度剖析qsort函數(shù),本篇將引入一個(gè)庫(kù)函數(shù)來(lái)實(shí)現(xiàn)我們希望的順序,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單電子通訊錄
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單電子通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
C語(yǔ)言實(shí)現(xiàn)飛機(jī)售票系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)飛機(jī)售票系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05

