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

C++超詳細(xì)梳理IO流操作

 更新時間:2022年07月02日 09:11:29   作者:Emphatic  
當(dāng)程序與外界進(jìn)行信息交換時,存在兩個對象,一個是程序中的對象,另一個是文件對象。流是信息流動的一種抽象,它負(fù)責(zé)在數(shù)據(jù)的生產(chǎn)者和數(shù)據(jù)的消費(fèi)者之間建立聯(lián)系,并管理數(shù)據(jù)的流動

C++定義了I/O標(biāo)準(zhǔn)類庫,這些每個類都稱為流/流類,用以完成某方面的功能

C++ 系統(tǒng)實現(xiàn)了一個龐大的類庫,其中 ios 為基類,其他類都是直接或間接派生自 ios 類

1.標(biāo)準(zhǔn)輸出輸入流-控制臺流(iostream類) 

cin實際上是一個標(biāo)準(zhǔn)輸入流對象(類對象),常用的方式有,cin>>(cin.operator>>()), cin.get(), cin.getline()(用法:cin.getline(char s[], int nLength))

或者在std命名空間下,有一個單獨(dú)的getline()函數(shù),但是該函數(shù)時使用string對象作為參數(shù)的,即:getline(cin, str)

cout是標(biāo)準(zhǔn)輸出流對象(類對象),cout<<

cout cin printf scanf(格式化輸入輸出)比較

總結(jié):c++中盡量用cin和cout

//c_str()就是把string類對象轉(zhuǎn)換成和c兼容的char*類型。
//這是為了與c語言兼容,在c語言中沒有string類型
//故必須通過string類對象的成員函數(shù)c_str()把string 對象轉(zhuǎn)換成c中的字符串樣式
//例如
	string a = "hellofjifj";
	printf("%s\n", a.c_str());
	//printf("%s\n", a);//這樣會有問題

2. 文件流(I/O操作)

在文件流中提供了三個派生類對文件數(shù)據(jù)進(jìn)行操作(注意這里是類,不像控制臺提供的是類對象)

  • ofstream:輸出,即寫文件,由ostream引申而來
  • ifstream:輸入,即讀取文件,由istream引申而來
  • fstream :輸入輸出,同時讀寫操作,由iostream引申而來

文件的類型:文本文件 和 二進(jìn)制文件

文件讀寫的步驟:

  • 包含的頭文件:#include <fstream>
  • 創(chuàng)建流
  • 打開文件(文件和流關(guān)聯(lián))
  • 讀寫 (寫操作:<<,put( ),write( )讀操作:>> , get( ),getline( ), read( ))
  • 關(guān)閉文件:把緩沖區(qū)數(shù)據(jù)完整地寫入文件, 添加文件結(jié)束標(biāo)志, 切斷流對象和外部文件的連接

文本文件

使用<< >> 進(jìn)行讀寫

<< 能實現(xiàn)以行為單位寫入文件

>> 不能一行為單位讀入內(nèi)存,而是以單詞為單位??偸且钥崭瘛ab、回車結(jié)束

    ofstream OpenFile("file.txt");  
  if (OpenFile.fail())  
  {  
    cout<<"打開文件錯誤!"<<endl;  
    exit(0);  
  }  
    OpenFile << "abc def ghi";//把內(nèi)容寫入file文件  
  OpenFile.close();    
    const int len=20;  
    char str[len];  
    ifstream OpenFile("file.txt");  
  if (OpenFile.fail())  
    {  
        cout<<"打開文件錯誤!"<<endl;  
        exit(0);  
    }  
    OpenFile >> str;  
    cout << str << endl;  
    OpenFile.close(); //str的內(nèi)容為abc,而不是abc def ghi(見空格停止)

getline()讀取一行

getline():以行為單位讀入內(nèi)存,能一次讀入一行

函數(shù)原型:istream &getline( char *buffer, streamsize num );

getline( )函數(shù)用于從文件讀取num個字符到buffer(內(nèi)存)中,直到下列情況發(fā)生時,讀取結(jié)束:

  • num個字符已經(jīng)讀入
  • 碰到一個換行標(biāo)志
  • 碰到一個EOF
    const int len=20;  
    char str[len];  
    ifstream OpenFile("file.txt");  
    if (OpenFile.fail())  
    {  
        cout<<"打開文件錯誤!"<<endl;  
        exit(0);  
    }  
    OpenFile.getline(str,20);  
    cout << str << endl;  
    OpenFile.close();//運(yùn)行結(jié)果:str的內(nèi)容為abc def ghi (一直把一行讀完)

get() put()進(jìn)行單個字符讀寫

ostream& put (char c);

函數(shù)功能:使用 put( )函數(shù),向文件中寫入字符

    char ch='1';  
    ofstream OpenFile("file.txt");  
  if (OpenFile.fail())  
    {  
        cout<<"打開文件錯誤!"<<endl;  
        exit(0);  
    }  
    OpenFile.put(ch); // 把字符1寫入文件
    OpenFile.close();  

istream& get (char& c);

函數(shù)功能:使用 get( )函數(shù),從文件中讀取字符

    char ch;  
    ifstream OpenFile("file.txt");  
  if (OpenFile.fail())  
    {  
        cout<<"打開文件錯誤!"<<endl;  
        exit(0);  
    }  
    OpenFile.get(ch);  
    cout << ch; //把字符1從文件中讀到ch(內(nèi)存)中
    OpenFile.close();  

二進(jìn)制文件讀寫

get() put()進(jìn)行單個字節(jié)讀寫

ofstream &put(char ch)

在內(nèi)存中寫入一個字節(jié)到文件

    char ch='a';  
    ofstream OpenFile("file.txt",ios::binary);  
    //以二進(jìn)制的方式處理,在打開時要用 ios::binary 顯式聲明
  if (OpenFile.fail())  
    {  
        cout<<"打開文件錯誤!"<<endl;  
        exit(0);  
    }  
    OpenFile.put(ch);  
    OpenFile.close();  

ifstream &get(char ch)

在文件中讀取一個字節(jié)到內(nèi)存

    char ch;  
    ifstream OpenFile("file.txt",ios::binary);  
  if (OpenFile.fail())  
    {  
        cout<<"打開文件錯誤!"<<endl;  
        exit(0);  
    }  
    OpenFile.get(ch); // 從文件中讀取一個字符
    cout << ch;  
    OpenFile.close(); 

read() write()多個字節(jié)讀寫

ostream & ostream :: write ( char * buf , int n ) ;

功能:把buf指向的內(nèi)容取n個字節(jié)寫入文件

參數(shù)說明:buf表示要寫入內(nèi)存的地址,傳參時要取地址。n表示要讀入字節(jié)的長度

注意:

  • 該函數(shù)遇到空字符時并不停止,因而能夠?qū)懭胪暾念惤Y(jié)構(gòu)
  • 第一個參數(shù)一個char型指針(指向內(nèi)存數(shù)據(jù)的起始地址),與對象結(jié)合使用的時候,要在對象地址之前要char做強(qiáng)制類型轉(zhuǎn)換
    char ch[12]="12 3 456 78";  
    ofstream OpenFile("file.txt");  
  if (OpenFile.fail())  
    {  
        cout<<"打開文件錯誤!"<<endl;  
        exit(0);  
    }  
    OpenFile.write(ch, 12);  
    OpenFile.close();  

istream & read ( char * buf , int n ) ;

功能:從文件中提取 n 個字節(jié)數(shù)據(jù),寫入buf指向的地方中

    char ch[12];  
    ifstream OpenFile("file.txt");  
    if (OpenFile.fail())  
    {  
        cout<<"打開文件錯誤!"<<endl;  
        exit(0);  
    }  
    OpenFile.read(ch,12);  
    cout << ch;  //運(yùn)行結(jié)果:數(shù)組ch的內(nèi)容為12 3 456 78
    OpenFile.close();  

注意事項

(1)程序不再使用文件時,為什么要關(guān)閉文件?

因為:

  • 文件緩沖區(qū)是一塊小的內(nèi)存空間.
  • 操作系統(tǒng)限制同時打開的文件數(shù)量

注意:close ( ) 函數(shù)關(guān)閉文件,但流對象仍然存在。

(2)文件的默認(rèn)打開方式為文本文件,要是想以二進(jìn)制的方式處理,在打開時要用 ios::binary 顯式聲明。

(3)針對文本文件操作時,get函數(shù)和>>的區(qū)別:

  • 在讀取數(shù)據(jù)時,get函數(shù)包括空白字符(遇空白字符不停止讀?。?/li>
  • >>在默認(rèn)情況下拒絕接受空白字符(遇到空白符停止讀?。?/li>

(4)文本文件的讀寫常使用的方法:使用<<寫入文件,使用getline 和 >> 讀到內(nèi)存

二進(jìn)制文件的讀寫常使用的方法:使用istream 類的成員函數(shù)read 和write 來實現(xiàn),

3.字符串輸入輸出流(sstream)

其相應(yīng)的派生類有istringstream類、ostringstream類、iostringstream類

sprintf sscanf 和 stringstream的使用

其實是整型和字符創(chuàng)類型的相互轉(zhuǎn)化:序列化(轉(zhuǎn)成字符串)和反序列化(將字符串中數(shù)據(jù)提取處理)

C當(dāng)中用法:sprintf和sscanf函數(shù)

C++中用法:字符串流

struct ServerInfo//要讀些的信息類
{
	char _ip[20];
	int  _port;
};
	//C當(dāng)中用法
    //將info中數(shù)據(jù)轉(zhuǎn)成字符串并存入buff中
	ServerInfo info = { "192.0.0.1", 8000 };
	char buff[128];//buff的大小不好確定
	sprintf_s(buff, "%s %d", info._ip, info._port);// 序列化,轉(zhuǎn)成字符串存入buff中
	
    //將buff中數(shù)據(jù)格式化輸出到rinfo中
	ServerInfo rinfo;
	sscanf(buff, "%s%d", rinfo._ip, &rinfo._port);// 反序列化,將字符串buff中數(shù)據(jù)轉(zhuǎn)成規(guī)定格式
	//空格間隔開了
	//C++用法
	//將info中數(shù)據(jù)轉(zhuǎn)成字符串并存到buff中
    ServerInfo info = { "192.0.0.1", 8000 };
	stringstream ssm;//字符串流對象
	ssm << info._ip <<" "<<info._port;//轉(zhuǎn)成字符串
	string buff = ssm.str();//查看字符串
	//從字符串提取至rinfo
	stringstream ssm;
	ssm.str("127.0.0.1 90");//這兩行直接按照下面的寫法也行
	//stringstream ssm("127.0.0.1 90");
	ServerInfo rinfo;
	ssm >> rinfo._ip >> rinfo._port;

補(bǔ)充內(nèi)容:C/C++中int和字符串類型的轉(zhuǎn)換

string轉(zhuǎn)int

  • atoi(c庫函數(shù)、ascll to integer)
  • strtol(c庫函數(shù),字符串轉(zhuǎn)成長整型)
  • stoi(stoi是C++的函數(shù),頭文件:#include < string >)

int轉(zhuǎn)string

  • itoa(c庫函數(shù))
  • to_string(C++11的函數(shù),可以適應(yīng)8種類型的重載,將其轉(zhuǎn)換為string,頭文件:#include < string >)

多功能轉(zhuǎn)換

stringstream

到此這篇關(guān)于C++超詳細(xì)梳理IO流操作的文章就介紹到這了,更多相關(guān)C++ IO流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入了解C++優(yōu)先隊列(priority_queue)的使用方法

    深入了解C++優(yōu)先隊列(priority_queue)的使用方法

    在計算機(jī)科學(xué)中,優(yōu)先隊列是一種抽象數(shù)據(jù)類型,它與隊列相似,但是每個元素都有一個相關(guān)的優(yōu)先級。C++中的優(yōu)先隊列是一個容器適配器(container adapter),它提供了一種在元素之間維護(hù)優(yōu)先級的方法。本文帶你深入了解C++優(yōu)先隊列的使用方法,需要的可以參考下
    2023-05-05
  • VC6.0實現(xiàn)讀取Excel數(shù)據(jù)的方法

    VC6.0實現(xiàn)讀取Excel數(shù)據(jù)的方法

    這篇文章主要介紹了VC6.0實現(xiàn)讀取Excel數(shù)據(jù)的方法,非常實用的功能,需要的朋友可以參考下
    2014-07-07
  • C++面試基礎(chǔ)之static關(guān)鍵字詳解

    C++面試基礎(chǔ)之static關(guān)鍵字詳解

    這篇文章主要給大家介紹了關(guān)于C++面試基礎(chǔ)之static關(guān)鍵字的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • c語言中單引號和雙引號的區(qū)別(順利解決從字符串中提取IP地址的困惑)

    c語言中單引號和雙引號的區(qū)別(順利解決從字符串中提取IP地址的困惑)

    c語言中的單引號和雙引號可是有很大區(qū)別的,使用之前一定要了解他們之間到底有什么不同,下面小編就給大家詳細(xì)的介紹一下吧,對此還不是很了解的朋友可以過來參考下
    2013-07-07
  • Qt實現(xiàn)解壓帶有密碼的加密文件

    Qt實現(xiàn)解壓帶有密碼的加密文件

    Quazip是Qt平臺下面的一個壓縮解壓縮庫。本文將利用Quazip實現(xiàn)解壓帶有密碼的加密文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-02-02
  • Cocos2d-x中背景音樂和音效使用實例

    Cocos2d-x中背景音樂和音效使用實例

    這篇文章主要介紹了Cocos2d-x中背景音樂和音效使用實例,注意本文中使用大量注釋來說明背景音樂和音效的使用方法,需要的朋友可以參考下
    2014-09-09
  • C++鏈表類的封裝詳情介紹

    C++鏈表類的封裝詳情介紹

    這篇文章主要介紹了C++鏈表類的封裝,文章基于C++的相關(guān)資料展開主題的詳細(xì)內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • c語言實現(xiàn)多線程動畫程序示例

    c語言實現(xiàn)多線程動畫程序示例

    這篇文章主要介紹了c語言實現(xiàn)多線程動畫程序示例,該程序是利用opengl圖形庫與fmod音頻庫寫的一個簡單3d動畫程序,需要的朋友可以參考下
    2014-04-04
  • C 轉(zhuǎn)移表/轉(zhuǎn)換表的深入分析

    C 轉(zhuǎn)移表/轉(zhuǎn)換表的深入分析

    本篇文章是對c語言中轉(zhuǎn)移表/轉(zhuǎn)換表進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • c語言解析bmp圖片的實例

    c語言解析bmp圖片的實例

    下面小編就為大家?guī)硪黄猚語言解析bmp圖片的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08

最新評論

安岳县| 射阳县| 象州县| 尉氏县| 吉木萨尔县| 县级市| 安丘市| 襄城县| 长兴县| 闻喜县| 榕江县| 巴中市| 麻江县| 平江县| 资溪县| 阿瓦提县| 临潭县| 霍林郭勒市| 鸡东县| 岗巴县| 永宁县| 天祝| 陆丰市| 固始县| 延津县| 微山县| 新闻| 汉中市| 新乐市| 永寿县| 屯留县| 绥阳县| 永康市| 竹溪县| 房产| 汉寿县| 韩城市| 久治县| 安图县| 林芝县| 平果县|