程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> istringstream和ostringstream的使用方法,istringstream

istringstream和ostringstream的使用方法,istringstream

編輯:C++入門知識

istringstream和ostringstream的使用方法,istringstream


寫程序用到istringstream和ostringstream,看了別人的博文,借鑒~~~~~~。

iostream 標准庫支持內存中的輸入/輸出,只要將流與存儲在程序內存中的 string 對象捆綁起來即可。此時,可使用 iostream 輸入和輸出操作符讀寫這個 string 對象。標准庫定義了三種類型的字符串流: 
•   istringstream,由 istream 派生而來,提供讀 string 的功能。 
•   ostringstream,由 ostream 派生而來,提供寫 string 的功能。 
•   stringstream,由 iostream 派生而來,提供讀寫 string 的功能。 
要使用上述類,必須包含 sstream 頭文件。 
與 fstream 類型一樣,上述類型由 iostream 類型派生而來,這意味著 iostream 上所有的操作適用於 sstream 中的類型。sstream 類型除了繼承的操作外,還各自定義了一個有 string 形參的構造函數,這個構造函數將 string 類型的實參復制給 stringstream 對象。對 stringstream 的讀寫操作實際上讀寫的就是該對象中的 string 對象。這些類還定義了名為 str 的成員,用來讀取或設置 stringstream 對象所操縱的 string 值。

注意到盡管 fstream 和 sstream 共享相同的基類,但它們沒有其他相互關
系。特別是,stringstream 對象不使用 open 和 close 函數,而 fstream 對
象則不允許使用 str。 
stringstream  特定的操作

stringstream strm; // 創建自由的 stringstream 對象
stringstream strm(s); //創建存儲 s 的副本的 stringstream 對象,其中 s 是 string 類型的對象
strm.str()  //返回 strm 中存儲的 string 類型對象
strm.str(s)  //將 string 類型的 s 復制給 strm,返回 void 

 stringstream  對象的和使用 
前面已經見過以每次一個單詞或每次一行的方式處理輸入的程序。第一種程
序用 string 輸入操作符,而第二種則使用 getline 函數。然而,有些程序需
要同時使用這兩種方式:有些處理基於每行實現,而其他處理則要操縱每行中每
個單詞。可用 stringstreams 對象實現:

string line, word;      // will hold a line and word from input,respectively
while (getline(cin, line))
{
    // read a line from theinput into line do per-line processing
    istringstream stream(line);  // bind to stream to the
    line we read
    while (stream >> word)
    { 
         // read a word from line
         // do per-word processing
    }
}

這裡,使用 getline 函數從輸入讀取整行內容。然後為了獲得每行中的單詞,將一個 istringstream 對象與所讀取的行綁定起來,這樣只需要使用普通的 string 輸入操作符即可讀出每行中的單詞。

stringstream  提供的轉換和/或格式化 
stringstream 對象的一個常見用法是,需要在多種數據類型之間實現自動格式化時使用該類類型。例如,有一個數值型數據集合,要獲取它們的 string 表示形式,或反之。sstream 輸入和輸出操作可自動地把算術類型轉化為相應的 string 表示形式,反過來也可以。

int val1 = 512, val2 = 1024;
ostringstream format_message;
// ok: converts values to a string representation
format_message << "val1: " << val1 << "\n"<< "val2: " << val2 << "\n"; 

這裡創建了一個名為 format_message 的 ostringstream 類型空對象,並將指定的內容插入該對象。重點在於 int 型值自動轉換為等價的可打印的字符串。format_message 的內容是以下字符:

val1: 512\nval2: 1024 

相反,用 istringstream 讀 string 對象,即可重新將數值型數據找回來。讀取 istringstream 對象自動地將數值型數據的字符表示方式轉換為相應的算術值。

// str member obtains the string associated with a stringstream
istringstream input_istring(format_message.str());
string dump; // place to dump the labels from the formatted message
// extracts the stored ascii values, converting back to arithmetic types
input_istring >> dump >> val1 >> dump >> val2;
cout << val1 << " " << val2 << endl;  // prints 512 1024 

這裡使用 。str 成員獲取與之前創建的 ostringstream 對象關聯的 string 副本。再將 input_istring 與 string 綁定起來。在讀 input_istring 時,相應的值恢復為它們原來的數值型表示形式為了讀取 input_string,必須把該 string 對象分解為若干個部分。我們要的是數值型數據;為了得到它們,必須讀取(和忽略)處於所需數據周圍的標號。

因為輸入操作符讀取的是有類型的值,因此讀入的對象類型必須和由 stringstream 讀入的值的類型一致。在本例中,input_istring 分成四個部分:
string 類型的值 val1,接著是 512,然後是 string 類型的值 val2,最後是 1024。一般情況下,使用輸入操作符讀 string 時,空白符將會忽略。於是,在讀與 format_message 關聯的 string 時,忽略其中的換行符。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved