日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++_IO类型_文件输入输出流_字符串流

發布時間:2024/7/5 c/c++ 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++_IO类型_文件输入输出流_字符串流 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

IO類型

  • iostream: 用于窗口的輸入輸出
  • fstream: 用于文件讀寫
  • sstream :讀寫存儲在內存中的string對象

注:他們繼承于istream與ostream,因此istream對象也可用于讀取ifstream, string對象, ostream對象同上; 并且iostream類型可在同一個流實現輸入輸出操作;.
IO對象不可復制賦值

ofstream out1,out2; out1=out2; //不支持 ofstream print(ofstream);//在形參傳遞過程中涉及到復制操作 out2=print(out2); //形參或返回類型不能為流類型,如果需要返回或傳遞IO對象,必須返回或傳遞該對象的指針或引用 //采用const修飾,那么就在讀寫過程中就不能改變IO對象狀態了,SO,不可用const修飾

IO條件狀態
條件狀態包含:

  • strm:badbit :被破壞的流
  • strm::failbit: 失敗的IO操作
  • strm::eofbit: 指出流已經到達文件結束符
  • clear: 將流中狀態值重置為有效值
  • setstate: 添加指定條件(為strm::iostate類型)
    注:前三者都為iostate類型, IO類定義了3個iostate類型的常量值:badbit,failbit,eofbit

所有流對象都包含一個條件狀態成員,由setstate,clear(添加IO條件,將某個條件狀態設置為有效值)操作管理;該狀態成員為iostate類型,以二進制(bit)形式使用.
流的狀態由bad,fail,eof,good操作提示,流正確時bad,fail,eof返回 false,good返回true
例:流狀態的查詢與控制

int i; while(cin>>i,!cin.eof()){if(cin.bad)throw runtime_error("流被破壞");if(cin.fail){cerr<<"數據錯誤,重試";cin.clear(istream::failbit);continue;} }

當同時使用多個狀態時可采用直接或運算(滿足條件的二進制位都變為1)

i.setstate(ifstream::badbit|ifstream::failbit); //同時將開啟流狀態成員

輸入輸出緩沖區管理
每個IO對象都具有一個緩沖區,用于儲存程序讀寫數據
如下操作導致緩沖區內容被刷新

  • 程序正常結束
  • 緩沖區已經存滿
  • 使用操作符顯示刷新緩沖區,例:endl,flush
  • 輸入操作完成,用unitbuf操作符設置流內部狀態
  • 將輸入輸出流關聯,在讀取時將刷新關聯的輸出緩沖區

注:unitbuf用于刷新所有輸出,當程序不正常結束,不會刷新緩沖區,系統不會在程序崩潰時自動刷新緩沖區
輸入輸出關聯
IO對象具有tie函數,用法如下:

cin.tie(&cout);//cin的任何操作都會刷新關聯的緩沖區 ostream *old_tie=cin.tie(); cin.tie(0);//形參為0打破二者的綁定 cin.tie(old_tie);//重新關聯

文件輸入流與輸出流

  • ofstream: 輸出文件流,創建文件并向文件寫入信息
  • ifstream:輸入文件流,從文件讀取信息
  • fstream:同時具有ofstream與ifsteam的功能

文件操作時,C++源代碼必須包含< iostream> < fstream>
打開文件
void open(const char *filename,ios::openmode mode);
第一個參數文件位置及文件名,第二個參數打開類型; open是文件流對象的成員函數
mode具有如下:

  • ios::app :在文件末尾添加內容
  • ios::ate :文件打開后定向到末尾
  • ios::in :打開文件用于讀取
  • ios::out :打開文件用于輸入
  • ios:trunc :打開文件清空已存在的文件流(我的理解是覆蓋以前文件內容,有不對的地方還請指出)

以上介紹的標志可以結合使用,out,trunc,app只能用于指定與ofstream或fstream對象關聯的文件,默認打開形式只有in,out

ofstream outfile; outfile.open("data.txt",ios::in|ios::trunc); //或者 fstream file; //fstream對象默認打開方式為in和out同時打開 file.open("data.txt",ios::in|ios::out);

關閉文件: 流對象.close();
寫入文件: 流插入運算符(<<)
讀取文件: 流提取符(>>)
實例操作:

#include<iostream> #include<fstream> using namespace std; int main(){char data[100];ofstream outfile;outfile.open("記錄.txt",ios::app); //此處可做修改cin.getline(data,100);//接受一個字符串,可以接收空格,將其存儲到數組中,最大存儲99個字符outfile<<data;outfile.close();ifstream infile;infile.open("記錄.txt");infile>>data;cout<<data<<endl; infile.close();return 0; }

字符串流

標準庫定義三種類型字符串流

  • istringstream: istream派生,提供讀string
  • ostringstream: ostream派生,提供寫string
  • stringstream: iostream派生,提供讀寫
    注:必須包含sstream頭文件

stringstream的特定操作

  • stringstream strm: 創建對象
  • stringstream strm(s): 用string對象s初始化strm;
  • strm.str(): 返回strm中存儲的string類型對象
  • strm.str(s): 將s復制給strm,返回void

ostringstream可用于格式轉換
istringstream自動將數值類型的字符轉化為相應數值

int i=1,j=2; ostringstream s1; s1<<i<<"i"<<j<<"j";//現在str內存儲的是"12"的字符串 istringstream s2(s1.str());//用s1初始化s2 string dump; s2>>i>>dump>>j>>dump;//接收分割效果的字符串,必須保證存儲操作與讀取操作格式一致 cout<<i<<j;

注:上述操作中注意需要將string對象分割才能得到,空白符與換行符會被忽略

總結

以上是生活随笔為你收集整理的C++_IO类型_文件输入输出流_字符串流的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。