您好,登錄后才能下訂單哦!
這篇“C++中IO流操作實例分析”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“C++中IO流操作實例分析”文章吧。
cin實際上是一個標準輸入流對象(類對象),常用的方式有,cin>>(cin.operator>>()), cin.get(), cin.getline()(用法:cin.getline(char s[], int nLength))
或者在std命名空間下,有一個單獨的getline()函數,但是該函數時使用string對象作為參數的,即:getline(cin, str)
cout是標準輸出流對象(類對象),cout<<
cout cin printf scanf(格式化輸入輸出)比較
總結:c++中盡量用cin和cout
//c_str()就是把string類對象轉換成和c兼容的char*類型。 //這是為了與c語言兼容,在c語言中沒有string類型 //故必須通過string類對象的成員函數c_str()把string 對象轉換成c中的字符串樣式 //例如 string a = "hellofjifj"; printf("%s\n", a.c_str()); //printf("%s\n", a);//這樣會有問題
在文件流中提供了三個派生類對文件數據進行操作(注意這里是類,不像控制臺提供的是類對象)
ofstream:輸出,即寫文件,由ostream引申而來
ifstream:輸入,即讀取文件,由istream引申而來
fstream :輸入輸出,同時讀寫操作,由iostream引申而來
文件的類型:文本文件 和 二進制文件
文件讀寫的步驟:
包含的頭文件:#include <fstream>
創建流
打開文件(文件和流關聯)
讀寫 (寫操作:<<,put( ),write( )讀操作:>> , get( ),getline( ), read( ))
關閉文件:把緩沖區數據完整地寫入文件, 添加文件結束標志, 切斷流對象和外部文件的連接
<< 能實現以行為單位寫入文件
>> 不能一行為單位讀入內存,而是以單詞為單位。總是以空格、Tab、回車結束
ofstream OpenFile("file.txt"); if (OpenFile.fail()) { cout<<"打開文件錯誤!"<<endl; exit(0); } OpenFile << "abc def ghi";//把內容寫入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的內容為abc,而不是abc def ghi(見空格停止)
getline():以行為單位讀入內存,能一次讀入一行
函數原型:istream &getline( char *buffer, streamsize num );
getline( )函數用于從文件讀取num個字符到buffer(內存)中,直到下列情況發生時,讀取結束:
num個字符已經讀入
碰到一個換行標志
碰到一個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();//運行結果:str的內容為abc def ghi (一直把一行讀完)
ostream& put (char c);
函數功能:使用 put( )函數,向文件中寫入字符
char ch='1'; ofstream OpenFile("file.txt"); if (OpenFile.fail()) { cout<<"打開文件錯誤!"<<endl; exit(0); } OpenFile.put(ch); // 把字符1寫入文件 OpenFile.close();
istream& get (char& c);
函數功能:使用 get( )函數,從文件中讀取字符
char ch; ifstream OpenFile("file.txt"); if (OpenFile.fail()) { cout<<"打開文件錯誤!"<<endl; exit(0); } OpenFile.get(ch); cout << ch; //把字符1從文件中讀到ch(內存)中 OpenFile.close();
ofstream &put(char ch)
在內存中寫入一個字節到文件
char ch='a'; ofstream OpenFile("file.txt",ios::binary); //以二進制的方式處理,在打開時要用 ios::binary 顯式聲明 if (OpenFile.fail()) { cout<<"打開文件錯誤!"<<endl; exit(0); } OpenFile.put(ch); OpenFile.close();
ifstream &get(char ch)
在文件中讀取一個字節到內存
char ch; ifstream OpenFile("file.txt",ios::binary); if (OpenFile.fail()) { cout<<"打開文件錯誤!"<<endl; exit(0); } OpenFile.get(ch); // 從文件中讀取一個字符 cout << ch; OpenFile.close();
ostream & ostream :: write ( char * buf , int n ) ;
功能:把buf指向的內容取n個字節寫入文件
參數說明:buf表示要寫入內存的地址,傳參時要取地址。n表示要讀入字節的長度
注意:
該函數遇到空字符時并不停止,因而能夠寫入完整的類結構
第一個參數一個char型指針(指向內存數據的起始地址),與對象結合使用的時候,要在對象地址之前要char做強制類型轉換
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 個字節數據,寫入buf指向的地方中
char ch[12]; ifstream OpenFile("file.txt"); if (OpenFile.fail()) { cout<<"打開文件錯誤!"<<endl; exit(0); } OpenFile.read(ch,12); cout << ch; //運行結果:數組ch的內容為12 3 456 78 OpenFile.close();
(1)程序不再使用文件時,為什么要關閉文件?
因為:
文件緩沖區是一塊小的內存空間.
操作系統限制同時打開的文件數量
注意:close ( ) 函數關閉文件,但流對象仍然存在。
(2)文件的默認打開方式為文本文件,要是想以二進制的方式處理,在打開時要用 ios::binary 顯式聲明。
(3)針對文本文件操作時,get函數和>>的區別:
在讀取數據時,get函數包括空白字符(遇空白字符不停止讀取)
>>在默認情況下拒絕接受空白字符(遇到空白符停止讀取)
(4)文本文件的讀寫常使用的方法:使用<<寫入文件,使用getline 和 >> 讀到內存
二進制文件的讀寫常使用的方法:使用istream 類的成員函數read 和write 來實現,
其相應的派生類有istringstream類、ostringstream類、iostringstream類
其實是整型和字符創類型的相互轉化:序列化(轉成字符串)和反序列化(將字符串中數據提取處理)
C當中用法:sprintf和sscanf函數
C++中用法:字符串流
struct ServerInfo//要讀些的信息類 { char _ip[20]; int _port; }; //C當中用法 //將info中數據轉成字符串并存入buff中 ServerInfo info = { "192.0.0.1", 8000 }; char buff[128];//buff的大小不好確定 sprintf_s(buff, "%s %d", info._ip, info._port);// 序列化,轉成字符串存入buff中 //將buff中數據格式化輸出到rinfo中 ServerInfo rinfo; sscanf(buff, "%s%d", rinfo._ip, &rinfo._port);// 反序列化,將字符串buff中數據轉成規定格式 //空格間隔開了
//C++用法 //將info中數據轉成字符串并存到buff中 ServerInfo info = { "192.0.0.1", 8000 }; stringstream ssm;//字符串流對象 ssm << info._ip <<" "<<info._port;//轉成字符串 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;
atoi(c庫函數、ascll to integer)
strtol(c庫函數,字符串轉成長整型)
stoi(stoi是C++的函數,頭文件:#include < string >)
itoa(c庫函數)
to_string(C++11的函數,可以適應8種類型的重載,將其轉換為string,頭文件:#include < string >)
以上就是關于“C++中IO流操作實例分析”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。