C++程式語言中stringstream類介紹
轉載自:https://blog.csdn.net/liitdar/article/details/82598039
本文主要介紹 C++ 程式語言中 stringstream 類的相關知識,同時通過示例程式碼介紹 stringstream 類的使用方法。
1 概述
<sstream> 定義了三個類:istringstream、ostringstream 和 stringstream,分別用來進行流的輸入、輸出和輸入輸出操作。本文以 stringstream 為主,介紹流的輸入和輸出操作。
<sstream> 主要用來進行資料型別轉換,由於 <sstream> 使用 string 物件來代替字元陣列(snprintf 方式),避免了緩衝區溢位的危險;而且,因為傳入引數和目標物件的型別會被自動推匯出來,所以不存在錯誤的格式化符號的問題。簡單說,相比 C 程式語言庫的資料型別轉換,<sstream> 更加安全、自動和直接。
2 示例程式碼
2.1 資料型別轉換
這裡展示一份示例程式碼,介紹將 int 型別轉換為 string 型別的過程。
示例程式碼(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; }
2.2 多個字串拼接
本示例介紹在 stringstream 中存放多個字串,實現多個字串拼接的目的(其實完全可以使用 string 類實現),同時,介紹 stringstream 類的清空方法。
示例程式碼(stringstream_test2.cpp)的內容如下:
#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() 方法適用於進行多次資料型別轉換的場景。詳見示例 2.3。
2.3 stringstream的清空
清空 stringstream 有兩種方法:clear() 方法以及 str("") 方法,這兩種方法對應不同的使用場景。str("") 方法的使用場景,在上面的示例中已經介紹過了,這裡介紹 clear() 方法的使用場景。
示例程式碼(stringstream_test3.cpp)的內容如下:
#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; }