1、先介紹幾個常用函數
1)、getline(istream is,string s)將輸入流is中讀取到的字符一直遇到\n結束,或文件結尾或讀取錯誤)放到字符串s中。就相當於讀取一行的字符到s中。
2)、getline(istream is, string s, char c) 將輸入流is中讀取字符一直遇到c結束,或文件結尾或讀取錯誤)放到字符串s中。
如: getline(cin,str,'#')
3)、getchar() 相當於getc(stdin)從輸入流中讀取一個字符
4)、cin.getline(char *cha, int num, char f)
從標准輸入流cin中讀取num個字符或者遇到結束字符f,char f默認以\n結束。將讀取的字符存放到cha中
如:char cha[10]; cin.getline(cha,5,'*'); cout<<cha<<endl;
5)、string s; cin>>s;從標准輸入流中讀取一個字符串放到s中。
2、面向對象的標准庫
IO類型:標准輸入輸出窗口,讀寫文件,內存中的字符串。
IO對象不可復制和賦值,因此作為函數的參數或返回值時必須加上引用符號。
1)標准輸入輸出 頭文件 <iostream>
標准輸入流:istream 類標准庫中的對象 cin
標准輸出流:ostream 類標准庫中的對象 cout
標准輸入輸出流:iostream類多重繼承於istream類和ostream類。
3、條件狀態
s.eof()s.fail()s.bad()s.good()s.clear()s.clear(flag)s.setstate(flag)s.rdstate()
flag:strm::iostatestrm::badbitstrm::failbitstrm::eofbit
如: while(cin.eof())如 ifstream::iostate infile_state = ifstream::badbit;
s.clear(eofbit)
刷新緩沖區的方式
1、
1)cout<<"hi"<<endl; 附加操作換行
2)cout<<"hi"<<flush; 沒有任何附加操作
3)cout<<"hi"<<ends附加操作插入空字符null
2、unitbuf操縱符
cout<<unitbuf<<"first"<<"second"<<nounitbuf;
等價於
cout<<"first"<<flush<<"second"<<flush;
nounitbuf將操作流恢復為正常的,由系統管理的緩沖區刷新方式。
4、文件的輸入輸出頭文件 <fstream>
ifstream: 由istream派生,提供讀文件的功能。
ofstream:由ostream派生,提供寫文件的功能。
fstream:由iostream派生,提供讀寫同一個文件的功能。
同時定義了自己的兩個操作 open 和 close
ifstream infile(ifile.c_str())//實參必須為c風格字符串,創建寫對象時綁定文件
ifstream infile; infile.open(ifile.c_str())//後面綁定。可實現文件流的重新綁定,一個文件流重新綁定另一個文件之前,需先關閉當前綁定的文件
ifstream infile("in");
infile.close();
infile.open("next");
清除文件流常用操作:
in.close(); in.clear();
清除輸入緩沖區常用操作:
in.ignore(200,' ');跳過輸入流中的200個字符或遇到結束符空格結束
in.ignore() 默認跳過1個字符。
文件模式:
in : 打開文件讀操作
out :打開文件寫操作
app :在每次寫之前找到文件尾
ate :打開文件後立即將文件定位到文件尾
trunc :打開文件後清除文件所有內容
binary:以二進制方式打開文件
out ,trunc, app 用於ofstream ,fstream關聯的文件。
in只能用於ifstream,fstream關聯的文件
ate binary可用於所有文件。
5、字符串流頭文件<sstream>
iostream標准庫支持內存中的輸入\輸出。只要將流與存在程序內存中的string對象捆綁起來即可
istringstream:由 istream派生而來,提供讀string的功能。
ostringstream:由ostream派生而來,提供寫string的功能。
stringstream:由iostream派生而來,提供讀寫功能。
常用操作:
stringstream strm;//創建自由的stringstream對象。
stringstream strm(s); //創建存儲s的副本的stringstream對象,其中s為string類型的對象
strm.str();// 返回strm中存儲的string類型對象。
strm.str(s);// 將string類型的s復制給strm,返回void
常用方式:
1)讀取文件中的每一個單詞
string line,word;
while(getline(cin,line))//讀取文件中的一行字符存放到line中
{
istringstream stream(line);//用line中的字符串初始化字符串流stream
while(stream>>word)//依次讀取字符串流中各個字符串
//do sth
}
(2) 格式轉換
cin cout 相當於C中的scanf printf格式化輸入輸出
int i; cin>>i ;根據整型i,從輸入流cin中讀取一個整型數據
int val1 = 512,val2= 1024;
ostringstream format_message;
format_message<<"val1: "<<val1<<"\n"
<<"val2: "<<val2<<"\n";
相當於將字符串val1: 512\n val2: 1024存儲到了字符串中是兩行)
然後可以根據一定的形式讀取對應的整數值。
istringstream input_istring(format_message.str());
string dump;
input_istring<<dump<<val1<<dump<val2;
cout<<val1<<val2;//只是為了從輸入流中提取整數值 512 和1024 ,dump只是輔助作用,去掉相應的字符串。
根據變量類型將輸入流input_istring中的數據賦給相應的變量。
本文出自 “李海川” 博客,請務必保留此出處http://lihaichuan.blog.51cto.com/498079/1290428