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中的数据赋给相应的变量。