04 | c++<sstream>帶給我們的優雅
阿新 • • 發佈:2022-04-18
問題導向
我們想要把各種不同的資料型別輸出的話?
就算是用printf也避免不了%d,%s等等複雜的東西。
我們的願望?
有這樣一個類似容器的東西,不管是什麼基本型別只要丟進去就會自動轉化為字串那太好了。有種萬眾歸一的感覺。
概述
三個主要用途
資料型別轉換
#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; }
多個字串的拼接
本示例介紹在 stringstream 中存放多個字串,實現多個字串拼接的目的(其實完全可以使用 string 類實現),同時,介紹 stringstream 類的清空方法。
#include <string> #include <sstream> #include <iostream> using namespace std; int main() { stringstream sstream; // 將多個字串放入 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; }
從上述程式碼執行結果能夠知道:
- 可以使用 str() 方法,將 stringstream 型別轉換為 string 型別;
- 可以將多個字串放入 stringstream 中,實現字串的拼接目的;
- 如果想清空 stringstream,必須使用 sstream.str(""); 方式;clear() 方法適用於進行多次資料型別轉換的場景。
stringstream的清空
清空 stringstream 有兩種方法:clear() 方法以及 str("") 方法,這兩種方法對應不同的使用場景。str("") 方法的使用場景,在上面的示例中已經介紹過了,這裡介紹 clear() 方法的使用場景。
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
stringstream sstream;
int first, second;
// 插入字串
sstream << "456";
// 轉換為int型別
sstream >> first;
cout << first << endl;
// 在進行多次型別轉換前,必須先執行clear()
sstream.clear();
// 插入bool值
sstream << true;
// 轉換為int型別
sstream >> second;
cout << second << endl;
return 0;
}
注意:在本示例涉及的場景下(多次資料型別轉換),必須使用 clear() 方法清空 stringstream,不使用 clear() 方法或使用 str("") 方法,都不能得到資料型別轉換的正確結果。下圖分別是未使用 clear() 方法、使用 str("") 方法代替 clear() 方法時的執行結果: