1. 程式人生 > 其它 >C++程式語言中stringstream類介紹

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;
}