国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

C++的iostream標(biāo)準(zhǔn)庫(kù)介紹(2)

2019-11-17 05:03:46
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
  接下來(lái)我們繼續(xù)看一下C++風(fēng)格的串流控制,C++引入了ostringstream、istringstream、stringstream這三個(gè)類,要使用他們創(chuàng)建對(duì)象就必須包含sstream.h頭文件。   istringstream類用于執(zhí)行C++風(fēng)格的串流的輸入操作。
  stringstream類同時(shí)可以支持C++風(fēng)格的串流的輸入輸出操作。
  strstream類同時(shí)可以支持C風(fēng)格的串流的輸入輸出操作。  istringstream類是從istream(輸入流類)和stringstreambase(c++字符串流基類)派生而來(lái),ostringstream是從ostream(輸出流類)和stringstreambase(c++字符串流基類)派生而來(lái),stringstream則是從iostream(輸入輸出流類)和和stringstreambase(c++字符串流基類)派生而來(lái)。   他們的繼續(xù)關(guān)系如下圖所示:C++的iostream標(biāo)準(zhǔn)庫(kù)介紹(2)  istringstream是由一個(gè)string對(duì)象構(gòu)造而來(lái),istringstream類從一個(gè)string對(duì)象讀取字符。
  istringstream的構(gòu)造函數(shù)原形如下:
  istringstream::istringstream(string str); //程序作者:管寧 
//站點(diǎn):www.cndev-lab.com 
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請(qǐng)務(wù)必聞名出處和作者 
#include <iostream> 
#include <sstream> 
using namespace std; 
int main()  

istringstream istr; 
istr.str("1 56.7",); 
//上述兩個(gè)過(guò)程可以簡(jiǎn)單寫成 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"); 
}   上例中,構(gòu)造字符串流的時(shí)候,空格會(huì)成為字符串參數(shù)的內(nèi)部分界,例子中對(duì)a,b對(duì)象的輸入"賦值"操作證實(shí)了這一點(diǎn),字符串的空格成為了整型數(shù)據(jù)與浮點(diǎn)型數(shù)據(jù)的分解點(diǎn),利用分界獲取的方法我們事實(shí)上完成了字符串到整型對(duì)象與浮點(diǎn)型對(duì)象的拆分轉(zhuǎn)換過(guò)程。   str()成員函數(shù)的使用可以讓istringstream對(duì)象返回一個(gè)string字符串(例如本例中的輸出操作(cout<<istr.str();)。  ostringstream同樣是由一個(gè)string對(duì)象構(gòu)造而來(lái),ostringstream類向一個(gè)string插入字符。
  ostringstream的構(gòu)造函數(shù)原形如下:
  ostringstream::ostringstream(string str);

  示例代碼如下://程序作者:管寧 
//站點(diǎn):www.cndev-lab.com 
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請(qǐng)務(wù)必聞名出處和作者 
#include <iostream> 
#include <sstream> 
#include <string> 
using namespace std; 
int main()  

ostringstream ostr; 
//ostr.str("abc");//假如構(gòu)造的時(shí)候設(shè)置了字符串參數(shù),那么增長(zhǎng)操作的時(shí)候不會(huì)從結(jié)尾開始增加,而是修改原有數(shù)據(jù),超出的部分增長(zhǎng) 
ostr.put('d'); 
ostr.put('e'); 
ostr<<"fg"; 
 
string gstr = ostr.str(); 
cout<<gstr; 
system("pause"); 
}  在上例代碼中,我們通過(guò)put()或者左移操作符可以不斷向ostr插入單個(gè)字符或者是字符串,通過(guò)str()函數(shù)返回增長(zhǎng)過(guò)后的完整字符串?dāng)?shù)據(jù),但值得注重的一點(diǎn)是,當(dāng)構(gòu)造的時(shí)候?qū)ο髢?nèi)已經(jīng)存在字符串?dāng)?shù)據(jù)的時(shí)候,那么增長(zhǎng)操作的時(shí)候不會(huì)從結(jié)尾開始增加,而是修改原有數(shù)據(jù),超出的部分增長(zhǎng)。 更多文章 更多內(nèi)容請(qǐng)看C/C++技術(shù)專題專題,或   對(duì)于stringstream了來(lái)說(shuō),不用我多說(shuō),大家也已經(jīng)知道它是用于C++風(fēng)格的字符串的輸入輸出的。
  stringstream的構(gòu)造函數(shù)原形如下:

  stringstream::stringstream(string str);  示例代碼如下:
//程序作者:管寧 

//站點(diǎn):www.cndev-lab.com 
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請(qǐng)務(wù)必聞名出處和作者 
#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類的對(duì)象我們還常用它進(jìn)行string與各種內(nèi)置類型數(shù)據(jù)之間的轉(zhuǎn)換。

  示例代碼如下://程序作者:管寧 
//站點(diǎn):www.cndev-lab.com 
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請(qǐng)務(wù)必聞名出處和作者 
#include <iostream> 
#include <sstream> 
#include <string> 
using namespace std; 
 
int main()  

    stringstream sstr; 
//--------int轉(zhuǎn)string----------- 
    int a=100; 
    string str; 
    sstr<<a; 
    sstr>>str; 
    cout<<str<<endl; 
//--------string轉(zhuǎn)char[]-------- 
    sstr.clear();//假如你想通過(guò)使用同一stringstream對(duì)象實(shí)現(xiàn)多種類型的轉(zhuǎn)換,請(qǐng)注重在每一次轉(zhuǎn)換之后都必須調(diào)用clear()成員函數(shù)。 
    string name = "colinguan"; 
    char cname[200]; 
    sstr<<name; 
    sstr>>cname; 
    cout<<cname; 
    system("pause"); 
}  接下來(lái)我們來(lái)學(xué)習(xí)一下輸入/輸出的狀態(tài)標(biāo)志的相關(guān)知識(shí),C++中負(fù)責(zé)的輸入/輸出的系統(tǒng)包括了關(guān)于每一個(gè)輸入/輸出操作的結(jié)果的記錄信息。這些當(dāng)前的狀態(tài)信息被包含在io_state類型的對(duì)象中。io_state是一個(gè)枚舉類型(就像open_mode一樣),以下便是它包含的值。

goodbit 無(wú)錯(cuò)誤

Eofbit 已到達(dá)文件尾

failbit 非致命的輸入/輸出錯(cuò)誤,可挽回

badbit 致命的輸入/輸出錯(cuò)誤,無(wú)法挽回
更多文章 更多內(nèi)容請(qǐng)看C/C++技術(shù)專題專題,或
  有兩種方法可以獲得輸入/輸出的狀態(tài)信息。一種方法是通過(guò)調(diào)用rdstate()函數(shù),它將返回當(dāng)前狀態(tài)的錯(cuò)誤標(biāo)記。例如,假如沒有任何錯(cuò)誤,則rdstate()會(huì)返回goodbit.

  下例示例,表示出了rdstate()的用法:
//程序作者:管寧   

//站點(diǎn):www.cndev-lab.com   
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請(qǐng)務(wù)必聞名出處和作者   
 
#include <iostream> 
using namespace std; 
 
int main()  

    int a; 
    cin>>a; 
    cout<<cin.rdstate()<<endl; 
    if(cin.rdstate() == ios::goodbit) 
    { 
        cout<<"輸入數(shù)據(jù)的類型正確,無(wú)錯(cuò)誤!"<<endl; 
    } 
    if(cin.rdstate() == ios_base::failbit) 
    { 
        cout<<"輸入數(shù)據(jù)類型錯(cuò)誤,非致命錯(cuò)誤,可清除輸入緩沖區(qū)挽回!"<<endl; 
    } 
    system("pause"); 
}  另一種方法則是使用下面任何一個(gè)函數(shù)來(lái)檢測(cè)相應(yīng)的輸入/輸出狀態(tài):bool bad();

bool eof();

bool fail();

bool good();   下例示例,表示出了上面各成員函數(shù)的用法://程序作者:管寧 
//站點(diǎn):www.cndev-lab.com 
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請(qǐng)務(wù)必聞名出處和作者 
 
#include <iostream> 
using namespace std; 
 
int main()  

    int a; 
    cin>>a; 
    cout<<cin.rdstate()<<endl; 
    if(cin.good()) 
    { 
        cout<<"輸入數(shù)據(jù)的類型正確,無(wú)錯(cuò)誤!"<<endl; 
    } 
    if(cin.fail()) 
    { 
        cout<<"輸入數(shù)據(jù)類型錯(cuò)誤,非致命錯(cuò)誤,可清除輸入緩沖區(qū)挽回!"<<endl; 
    } 
    system("pause"); 
}  假如錯(cuò)誤發(fā)生,那么流狀態(tài)既被標(biāo)記為錯(cuò)誤,你必須清除這些錯(cuò)誤狀態(tài),以使你的程序能正確適當(dāng)?shù)乩^續(xù)運(yùn)行。要清除錯(cuò)誤狀態(tài),需使用clear()函數(shù)。此函數(shù)帶一個(gè)參數(shù),它是你將要設(shè)為當(dāng)前狀態(tài)的標(biāo)志值。,只要將ios::goodbit作為實(shí)參。

  示例代碼如下://程序作者:管寧 
//站點(diǎn):www.cndev-lab.com 
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請(qǐng)務(wù)必聞名出處和作者 
 
#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"); 
} 更多文章 更多內(nèi)容請(qǐng)看C/C++技術(shù)專題專題,或   通常當(dāng)我們發(fā)現(xiàn)輸入有錯(cuò)又需要改正的時(shí)候,使用clear()更改標(biāo)記為正確后,同時(shí)也需要使用get()成員函數(shù)清除輸入緩沖區(qū),以達(dá)到重復(fù)輸入的目的。


  示例代碼如下:
//程序作者:管寧 
//站點(diǎn):www.cndev-lab.com 
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請(qǐng)務(wù)必聞名出處和作者 
#include <iostream> 
using namespace std; 
 
int main()  

    int a; 
    while(1) 
    { 
        cin>>a; 
        if(!cin)//條件可改寫為cin.fail() 
        { 
            cout<<"輸入有錯(cuò)!請(qǐng)重新輸入"<<endl; 
            cin.clear(); 
            cin.get(); 
        } 
        else 
        { 
            cout<<a; 
            break; 
        } 
    } 
    system("pause"); 
}  最后再給出一個(gè)對(duì)文件流錯(cuò)誤標(biāo)記處理的例子,鞏固學(xué)習(xí),代碼如下://程序作者:管寧 
//站點(diǎn):www.cndev-lab.com 
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請(qǐng)務(wù)必聞名出處和作者 
#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<<"文件內(nèi)容已經(jīng)全部讀完"<<endl; 
        } 
        while(myfile.get(ch)) 
        { 
            cout<<ch; 
        } 
    } 
    system("pause"); 
}

  未完待續(xù)…… 更多文章 更多內(nèi)容請(qǐng)看C/C++技術(shù)專題專題,或

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 吴桥县| 屏边| 千阳县| 西丰县| 阜南县| 莎车县| 若尔盖县| 辉县市| 惠安县| 永州市| 台东市| 广西| 昌都县| 霸州市| 独山县| 会东县| 延津县| 潞城市| 紫阳县| 文登市| 梅河口市| 格尔木市| 枝江市| 乌拉特前旗| 平利县| 阿拉尔市| 金湖县| 西平县| 吉安县| 滨州市| 荣成市| 库伦旗| 梅河口市| 乌苏市| 大关县| 寻乌县| 鄂州市| 雷州市| 汶川县| 高唐县| 霍山县|