亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++的sstream標準庫詳細介紹

2020-01-26 15:54:05
字體:
來源:轉載
供稿:網友

C++的sstream標準庫介紹
接下來我們繼續看一下C++風格的串流控制 ,C++引入了ostringstream、istringstream、stringstream這三個類,要使用他們創建對象就必須包含sstream.h頭文件。

istringstream類用于執行C++風格的串流的輸入操作。
ostringstream類用于執行C風格的串流的輸出操作。
strstream類同時可以支持C風格的串流的輸入輸出操作。

istringstream類是從istream(輸入流類)和stringstreambase(c++字符串流基類)派生而來,ostringstream是從ostream(輸出流類)和stringstreambase(c++字符串流基類)派生而來,stringstream則是從iostream(輸入輸出流類)和和stringstreambase(c++字符串流基類)派生而來。

他們的繼承關系如下圖所示:

istringstream是由一個string對象構造而來,istringstream類從一個string對象讀取字符。

istringstream的構造函數原形如下:
istringstream::istringstream(string str);

復制代碼 代碼如下:

#include <iostream > 
#include <sstream > 
using  namespace  std; 
int  main ()  

istringstream istr; 
istr.str("1 56.7",); 
//上述兩個過程可以簡單寫成 istringstream istr("1 56.7"); 
cout  << istr.str()<<endl; 
int  a; 
float  b; 
istr>>a; 
cout <<a<<endl; 
istr>>b; 
cout <<b<<endl; 
system("pause"); 
}

上例中,構造字符串流的時候,空格會成為字符串參數的內部分界,例子中對a,b對象的輸入"賦值"操作證明了這一點,字符串的空格成為了整型數據與浮點型數據的分解點,利用分界獲取的方法我們事實上完成了字符串到整型對象與浮點型對象的拆分轉換過程。

str()成員函數的使用可以讓istringstream對象返回一個string字符串(例如本例中的輸出操作(cout<<istr.str();)。

ostringstream同樣是由一個string對象構造而來,ostringstream類向一個string插入字符。

ostringstream的構造函數原形如下:
ostringstream::ostringstream(string str);

示例代碼如下:

復制代碼 代碼如下:

#include <iostream > 
#include <sstream > 
#include <string > 
using  namespace  std; 
int  main ()  

ostringstream ostr; 
//ostr.str("abc");//如果構造的時候設置了字符串參數,那么增長操作的時候不會從結尾開始增加,而是修改原有數據,超出的部分增長 
ostr.put('d'); 
ostr.put('e'); 
ostr<<"fg"; 

string  gstr =  ostr.str(); 
cout <<gstr; 
system("pause"); 
}

在上例代碼中,我們通過put()或者左移操作符可以不斷向ostr插入單個字符或者是字符串,通過str()函數返回增長過后的完整字符串數據,但值得注意的一點是,當構造的時候對象內已經存在字符串數據的時候,那么增長操作的時候不會從結尾開始增加,而是修改原有數據,超出的部分增長。

對于stringstream了來說,不用我多說,大家也已經知道它是用于C++風格的字符串的輸入輸出的。

stringstream的構造函數原形如下:
stringstream::stringstream(string str);

示例代碼如下:

復制代碼 代碼如下:

#include <iostream > 
#include <sstream > 
#include <string > 
using  namespace  std; 

int  main ()  

    stringstream ostr("ccc"); 
    ostr.put('d'); 
    ostr.put('e'); 
    ostr<<"fg"; 
    string  gstr =  ostr.str(); 
    cout <<gstr<<endl; 

    char  a; 
    ostr>>a; 
    cout <<a 

    system("pause"); 
}

除此而外,stringstream類的對象我們還常用它進行string與各種內置類型數據之間的轉換。

示例代碼如下:

復制代碼 代碼如下:

#include <iostream > 
#include <sstream > 
#include <string > 
using  namespace  std; 

int  main ()  

    stringstream sstr; 
//--------int轉string----------- 
    int  a=100; 
    string  str; 
    sstr<<a; 
    sstr>>str; 
    cout <<str<<endl; 
//--------string轉char[]-------- 
    sstr.clear();//如果你想通過使用同一stringstream對象實現多種類型的轉換,請注意在每一次轉換之后都必須調用clear()成員函數。 
    string  name =  "colinguan"; 
    char  cname[200]; 
    sstr<<name; 
    sstr>>cname; 
    cout <<cname; 
    system("pause"); 
}

接下來我們來學習一下輸入/輸出的狀態標志 的相關知識,C++中負責的輸入/輸出的系統包括了關于每一個輸入/輸出操作的結果的記錄信息。這些當前的狀態信息被包含在io_state類型的對象中。io_state是一個枚舉類型(就像open_mode一樣),以下便是它包含的值。

goodbit 無錯誤
Eofbit 已到達文件尾
failbit 非致命的輸入/輸出錯誤,可挽回
badbit 致命的輸入/輸出錯誤,無法挽回

有兩種方法可以獲得輸入/輸出的狀態信息。一種方法是通過調用rdstate()函數,它將返回當前狀態的錯誤標記。例如,假如沒有任何錯誤,則rdstate()會返回goodbit.

下例示例,表示出了rdstate()的用法:

復制代碼 代碼如下:

#include <iostream > 
using  namespace  std; 

int  main ()  

    int  a; 
    cin >>a; 
    cout <<cin .rdstate()<<endl; 
    if (cin .rdstate() == ios ::goodbit) 
    { 
        cout <<"輸入數據的類型正確,無錯誤!"<<endl; 
    } 
    if (cin .rdstate() == ios_base::failbit) 
    { 
        cout <<"輸入數據類型錯誤,非致命錯誤,可清除輸入緩沖區挽回!"<<endl; 
    } 
    system("pause"); 
}

另一種方法則是使用下面任何一個函數來檢測相應的輸入/輸出狀態:

bool bad();
bool eof();
bool fail();
bool good();

下例示例,表示出了上面各成員函數的用法:

復制代碼 代碼如下:

#include <iostream > 
using  namespace  std; 

int  main ()  

    int  a; 
    cin >>a; 
    cout <<cin .rdstate()<<endl; 
    if (cin .good()) 
    { 
        cout <<"輸入數據的類型正確,無錯誤!"<<endl; 
    } 
    if (cin .fail()) 
    { 
        cout <<"輸入數據類型錯誤,非致命錯誤,可清除輸入緩沖區挽回!"<<endl; 
    } 
    system("pause"); 
}

如果錯誤發生,那么流狀態既被標記為錯誤,你必須清除這些錯誤狀態,以使你的程序能正確適當地繼續運行。要清除錯誤狀態,需使用clear()函數。此函數帶一個參數,它是你將要設為當前狀態的標志值。,只要將ios::goodbit作為實參。

示例代碼如下:

復制代碼 代碼如下:

#include <iostream > 
using  namespace  std; 

int  main ()  

    int  a; 
    cin >>a; 
    cout <<cin .rdstate()<<endl; 
    cin .clear(ios ::goodbit); 
    cout <<cin .rdstate()<<endl; 
    system("pause"); 
}

通常當我們發現輸入有錯又需要改正的時候,使用clear()更改標記為正確后,同時也需要使用get()成員函數清除輸入緩沖區,以達到重復輸入的目的。

示例代碼如下:

復制代碼 代碼如下:

#include <iostream > 
using  namespace  std; 

int  main ()  

    int  a; 
    while (1) 
    { 
        cin >>a; 
        if (!cin )//條件可改寫為cin.fail() 
        { 
            cout <<"輸入有錯!請重新輸入"<<endl; 
            cin .clear(); 
            cin .get(); 
        } 
        else  
        { 
            cout <<a; 
            break ; 
        } 
    } 
    system("pause"); 
}

最后再給出一個對文件流錯誤標記處理的例子,鞏固學習,代碼如下:
復制代碼 代碼如下:

#include <iostream > 
#include <fstream > 
using  namespace  std; 

int  main ()  

    ifstream myfile("c://1.txt",ios_base::in,0); 
    if (myfile.fail()) 
    { 
        cout <<"文件讀取失敗或指定文件不存在!"<<endl; 
    } 
    else  
    { 
        char  ch; 
        while (myfile.get(ch)) 
        { 
            cout <<ch; 
        } 
        if (myfile.eof()) 
        { 
            cout <<"文件內容已經全部讀完"<<endl; 
        } 
        while (myfile.get(ch)) 
        { 
            cout <<ch; 
        } 
    } 
    system("pause"); 
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久免费精品| 日本欧美一级片| 97在线视频免费看| 亚洲精品免费一区二区三区| 欧美大片在线看免费观看| 91av在线播放| 日韩精品视频在线观看网址| 亚洲精品在线观看www| 日韩av快播网址| 91精品国产综合久久香蕉的用户体验| 国产中文字幕91| 亚洲欧美激情四射在线日| 欧美激情啊啊啊| 亚洲性线免费观看视频成熟| 亚洲自拍高清视频网站| 国产有码在线一区二区视频| 国产精品久久色| 精品久久久久久久久中文字幕| 国产精品99久久久久久白浆小说| 欧美又大又硬又粗bbbbb| 日韩一区二区在线视频| 久久久久国产一区二区三区| 欧美在线一区二区三区四| 亚洲美腿欧美激情另类| 久久成人精品一区二区三区| 国产欧美日韩专区发布| 狠狠色狠狠色综合日日五| 一区二区欧美激情| 日韩在线观看免费全集电视剧网站| 5566成人精品视频免费| 亚洲xxxx视频| 在线成人一区二区| 色与欲影视天天看综合网| 国产一区二区三区网站| 在线观看不卡av| 欧美日韩午夜激情| 日韩电影在线观看永久视频免费网站| 超碰日本道色综合久久综合| 久久精品在线播放| 亚洲综合在线播放| 国产精品日日做人人爱| 亲子乱一区二区三区电影| 日韩国产高清污视频在线观看| 日韩中文字幕在线免费观看| 欧美性猛交xxxxx免费看| 日韩欧美在线视频日韩欧美在线视频| 国产精品白丝av嫩草影院| 91极品视频在线| 久久影视电视剧免费网站清宫辞电视| 欧美另类极品videosbestfree| 韩国精品美女www爽爽爽视频| 久久精品国产免费观看| 正在播放国产一区| 亚洲自拍高清视频网站| 亚洲天堂2020| 日韩免费在线免费观看| 亚洲va久久久噜噜噜| 午夜免费日韩视频| 国产精品一区二区3区| 日韩电影在线观看永久视频免费网站| 亚洲丝袜一区在线| 国产亚洲精品美女久久久久| 激情成人中文字幕| 亚洲视频一区二区三区| 久久久久久综合网天天| 中文字幕不卡av| 欧美丝袜一区二区三区| 成人中文字幕+乱码+中文字幕| 久久人人爽人人爽人人片亚洲| 91精品久久久久久久久久久| 成人a免费视频| 国产精品国产三级国产专播精品人| 亚洲国产高清自拍| 亚洲国产精品va| 亚洲第一av网| 成人免费视频xnxx.com| 日韩av片永久免费网站| 日韩精品视频在线播放| 91av免费观看91av精品在线| 一区二区三区回区在观看免费视频| 色播久久人人爽人人爽人人片视av| 国产成人精品免高潮费视频| 91精品视频免费看| 国产精品jizz在线观看麻豆| 国产精品一区二区电影| 亚洲第一中文字幕| 精品久久久久久久久久ntr影视| 中文字幕欧美日韩va免费视频| 国自产精品手机在线观看视频| 日韩最新在线视频| 福利二区91精品bt7086| 懂色av影视一区二区三区| 美日韩在线视频| 97人人爽人人喊人人模波多| 国产精品久久久久不卡| 国产欧美一区二区三区在线看| 精品久久久久久久久久久久| 欧美激情喷水视频| 日本高清久久天堂| 国内精品小视频在线观看| 日本人成精品视频在线| 伊人久久久久久久久久| 欧美在线视频免费播放| 亚州国产精品久久久| 欧美午夜www高清视频| 久久精品视频免费播放| 欧美日韩一区二区三区在线免费观看| 亚洲精品福利在线| 国产精品国语对白| 亚洲国产精品女人久久久| 一二美女精品欧洲| 亚洲欧美日韩天堂| 狠狠躁夜夜躁久久躁别揉| 欧美另类极品videosbestfree| 国产欧美一区二区三区在线| 日韩欧美在线视频免费观看| 日韩成人黄色av| 性欧美亚洲xxxx乳在线观看| 2020久久国产精品| 欧美精品手机在线| 亚洲精品按摩视频| 最近2019中文字幕mv免费看| 久久精品中文字幕电影| 国产精品igao视频| 亚洲性生活视频| 不卡av在线网站| 亚洲国产私拍精品国模在线观看| 久久中文久久字幕| 亚洲一区av在线播放| 欧美激情亚洲视频| 在线成人免费网站| 欧美性猛交xxxx乱大交蜜桃| 国产噜噜噜噜噜久久久久久久久| 久久亚洲综合国产精品99麻豆精品福利| 一区二区三欧美| 美女久久久久久久| 国产精品色婷婷视频| 日韩在线视频免费观看高清中文| 国产精品扒开腿做爽爽爽的视频| 久久久影视精品| 成人欧美一区二区三区在线| 欧美性感美女h网站在线观看免费| 久久人人爽亚洲精品天堂| 欧美日韩在线视频一区| 亚洲精品久久7777777| 国产成人精品一区二区在线| 欧美国产精品va在线观看| 国产精品免费一区二区三区都可以| 久久影院中文字幕| 亚洲福利影片在线| 久久久99久久精品女同性| 91老司机精品视频| 91精品在线看| 日韩av一区在线| 国产一区二区三区在线播放免费观看| 久久69精品久久久久久国产越南| 在线电影av不卡网址| 精品国产福利视频| 亚洲精品视频网上网址在线观看| 日韩一区二区精品视频| 亚洲国产精品一区二区三区| 国语自产在线不卡| 亚洲国产小视频| 精品国产一区二区三区久久久|