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

成功的將 int 型的1000 轉成 string 型 1000

 

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

注意:在本示例涉及的場景下(多次數據類型轉換),必須使用 clear() 方法清空 stringstream,不使用 clear() 方法或使用 str("") 方法,都不能得到數據類型轉換的正確結果。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM