最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中string流的具體使用

 更新時(shí)間:2025年06月11日 10:00:41   作者:點(diǎn)云SLAM  
本文主要介紹了C++中string流的具體使用,包括istringstream、ostringstream、stringstream這三種類型的使用,具有一定的參考價(jià)值,感興趣的可以了解一下

一、概覽與類體系

C++ 提供三種基于內(nèi)存字符串的流,定義在 <sstream> 中:

  • std::istringstream:輸入流,從已有字符串中讀取并解析。
  • std::ostringstream:輸出流,向內(nèi)部緩沖區(qū)寫入內(nèi)容,最終取回為字符串。
  • std::stringstream:讀寫流,兼具 istringstream 和 ostringstream 的功能。

它們都繼承自 std::basic_iostream<char>,可使用所有流操作符與格式化工具。

二、常見用法

1. 構(gòu)造與取出字符串

std::ostringstream oss;             // 默認(rèn)空緩沖
oss << "Value=" << 42 << ", Pi=" 
    << std::fixed << std::setprecision(3) << 3.14159;
// 獲取結(jié)果
std::string s = oss.str();          // s == "Value=42, Pi=3.142"
  • str():獲取當(dāng)前緩沖區(qū)的字符串。
  • str(const std::string&):重置緩沖區(qū)內(nèi)容。

2. 字符串解析

std::string line = "123  45.6 OK";
// 將 line 內(nèi)容作為流緩沖
std::istringstream iss(line);

int    a;
double b;
std::string status;

// 按空白自動切分并轉(zhuǎn)換
if (iss >> a >> b >> status) {
    // a==123, b==45.6, status=="OK"
}

// 檢查是否完全消費(fèi)或錯誤
if (iss.fail() && !iss.eof()) {
    // 轉(zhuǎn)換中發(fā)生格式錯誤
}
  • 運(yùn)算符>> 會跳過空白,并嘗試按目標(biāo)類型解析。
  • 解析失敗時(shí),流會置 failbit,后續(xù)操作將不中斷程序,除非打開異常模式。

3. 讀寫混合

std::stringstream ss;
ss << "X=" << 10 << ";Y=" << 20;
// 重設(shè)讀寫位置到開頭
ss.seekg(0);

// 逐字符讀取、跳過標(biāo)識
char    ch;
int     x, y;
ss >> ch >> ch >> x;   // 假設(shè)格式 "X=10"
ss >> ch >> ch >> y;   // 跳過 ";Y="
  • seekg/seekp 可重定位讀/寫指針,方便混合使用。
  • 在寫完后若要讀,通常要 ss.seekg(0);同理,由讀轉(zhuǎn)寫可用 ss.seekp(0, std::ios::end)。

三、格式控制與狀態(tài)檢查

格式化:與標(biāo)準(zhǔn)流一致,可用 <iomanip> 中的操縱器,如 std::hex、std::setw、std::setfill、std::boolalpha、std::fixed、std::scientific 等調(diào)整輸出格式。

狀態(tài)位:用 good()、fail()、eof()、bad()、rdstate() 檢測流狀態(tài);用 clear() 重置。

異常模式

iss.exceptions(std::ios::failbit | std::ios::badbit);
try {
  int v; 
  iss >> v;  // 解析失敗即拋異常
} catch (const std::ios_base::failure& e) {
  // 處理錯誤
}

默認(rèn)不會拋。

四、性能與注意事項(xiàng)

  • 避免頻繁 str() 調(diào)用:每次 str() 都會拷貝緩沖區(qū)字符串,影響性能??稍谧詈笠淮稳∮脮r(shí)再調(diào)用。
  • 預(yù)分配緩沖:可用 ss.str().reserve(n) 或先構(gòu)造帶初始字符串的 stringstream,減少動態(tài)分配。
  • 切換格式后狀態(tài)保留:如果你在一個流上設(shè)置了某個格式(如 std::hex),它會一直生效, remember to reset(std::dec)。
  • 注意空白和分隔>> 默認(rèn)以空白分隔,解析整行或含空格的字段時(shí)要用 std::getline
  • 多語種/寬字符:對于 Unicode 或?qū)捵址髡埵褂?nbsp;std::basic_stringstream<wchar_t>。

五、綜合示例

#include <iostream>
#include <sstream>
#include <iomanip>

int main() {
    // 構(gòu)建字符串
    std::ostringstream oss;
    oss << "Point(" 
        << std::setw(2) << std::setfill('0')
        << 7 << "," 
        << std::fixed << std::setprecision(1)
        << 3.14 << ")";
    std::string desc = oss.str();  // "Point(07,3.1)"
    std::cout << desc << "\n";

    // 解析回?cái)?shù)值
    std::istringstream iss(desc);
    char ch;
    int ix;
    double dy;
    if ( (iss >> ch >> ch >> ix >> ch >> dy >> ch).good() ) {
        std::cout << "Parsed: x=" << ix << ", y=" << dy << "\n";
    } else {
        std::cerr << "Parse error\n";
    }

    // 讀寫混合:累加偏移
    std::stringstream ss("100 200 300");
    int sum = 0, v;
    while (ss >> v) sum += v;  // sum=600
    std::cout << "Sum=" << sum << "\n";

    return 0;
}

小結(jié)

  • std::ostringstream:安全構(gòu)建復(fù)雜字符串/格式化輸出。
  • std::istringstream:高效拆解、解析已知格式的文本。
  • std::stringstream:讀寫一體,用于需要往返操作的場景。
  • 始終關(guān)注流狀態(tài)和格式保留,并合理管理緩沖與性能。

掌握這些知識,你就能在日志構(gòu)建、文本解析、動態(tài)內(nèi)容生成等場景中,靈活高效地運(yùn)用 C++ 的字符串流。

到此這篇關(guān)于C++中string流的具體使用的文章就介紹到這了,更多相關(guān)C++ string流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中remove與erase區(qū)別小結(jié)

    C++中remove與erase區(qū)別小結(jié)

    remove函數(shù)和 erase函數(shù)都可以實(shí)現(xiàn)元素的刪除,本文主要介紹了C++中remove與erase區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • OpenCV實(shí)現(xiàn)給圖片添加邊框功能

    OpenCV實(shí)現(xiàn)給圖片添加邊框功能

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)給圖片添加邊框功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • c語言與c++基礎(chǔ)知識點(diǎn)(必看)

    c語言與c++基礎(chǔ)知識點(diǎn)(必看)

    下面小編就為大家?guī)硪黄猚語言與c++基礎(chǔ)知識點(diǎn)(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • C語言 以字符形式讀寫文件詳解及示例代碼

    C語言 以字符形式讀寫文件詳解及示例代碼

    本文主要介紹C語言 以字符形式讀寫文件,這里整理了讀寫文件的一些資料并附示例代碼,供大家學(xué)習(xí)參考,有需要的小伙伴可以參考下
    2016-08-08
  • C語言環(huán)形鏈表如何檢測詳解

    C語言環(huán)形鏈表如何檢測詳解

    這篇文章主要介紹了C語言環(huán)形鏈表如何檢測,環(huán)形鏈表是指鏈表的尾節(jié)點(diǎn)指向鏈表中的某個節(jié)點(diǎn),從而形成一個環(huán),判斷鏈表中是否存在環(huán)是許多算法問題的基礎(chǔ),也是面試中常見的考點(diǎn),需要的朋友可以參考下
    2025-05-05
  • C語言從猜數(shù)字游戲中理解數(shù)據(jù)結(jié)構(gòu)

    C語言從猜數(shù)字游戲中理解數(shù)據(jù)結(jié)構(gòu)

    猜數(shù)字是興起于英國的益智類小游戲,起源于20世紀(jì)中期,一般由兩個人或多人玩,也可以由一個人和電腦玩。游戲規(guī)則為一方出數(shù)字,一方猜,今天我們來用這個游戲案例理解數(shù)據(jù)結(jié)構(gòu)
    2022-04-04
  • C++?反向迭代器模擬實(shí)現(xiàn)

    C++?反向迭代器模擬實(shí)現(xiàn)

    反向迭代器reverse_iterator是一種反向遍歷容器的迭代器,也就是從最后一個元素到第一個元素遍歷容器,本文主要介紹了C++?反向迭代器模擬實(shí)現(xiàn),感興趣的可以了解一下
    2024-01-01
  • C++中volatile和mutable關(guān)鍵字用法詳解

    C++中volatile和mutable關(guān)鍵字用法詳解

    這篇文章主要介紹了C++中volatile和mutable關(guān)鍵字用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C++11 并發(fā)指南之Lock 詳解

    C++11 并發(fā)指南之Lock 詳解

    這篇文章主要介紹了C++11 并發(fā)指南之Lock 詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 將正小數(shù)轉(zhuǎn)化為2-9進(jìn)制小數(shù)的實(shí)現(xiàn)方法

    將正小數(shù)轉(zhuǎn)化為2-9進(jìn)制小數(shù)的實(shí)現(xiàn)方法

    本篇文章對正小數(shù)轉(zhuǎn)化為2-9進(jìn)制小數(shù)的實(shí)現(xiàn)方法進(jìn)行了介紹,需要的朋友參考下
    2013-05-05

最新評論

茶陵县| 抚州市| 内丘县| 墨脱县| 平湖市| 平遥县| 彰化市| 定西市| 马公市| 禄劝| 牙克石市| 苏尼特右旗| 长葛市| 汨罗市| 左云县| 若尔盖县| 宽城| 麻城市| 海原县| 临邑县| 万盛区| 高雄县| 高邮市| 樟树市| 洛浦县| 香港| 临泉县| 石狮市| 娄底市| 个旧市| 庄浪县| 东方市| 平安县| 隆昌县| 吉水县| 田阳县| 北安市| 筠连县| 三江| 满洲里市| 葫芦岛市|