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个字符或者遇到结束字符fchar 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

1cout<<"hi"<<endl; 附加操作换行

2cout<<"hi"<<flush; 没有任何附加操作

3cout<<"hi"<<ends附加操作插入空字符null

2unitbuf操纵符

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只能用于ifstreamfstream关联的文件

ate binary可用于所有文件。

 

5、字符串流头文件<sstream>

iostream标准库支持内存中的输入\输出。只要将流与存在程序内存中的string对象捆绑起来即可

istringstream: istream派生而来,提供读string的功能。

ostringstream:ostream派生而来,提供写string的功能。

stringstream:iostream派生而来,提供读写功能。

常用操作:

stringstream strm;//创建自由的stringstream对象。

stringstream strm(s); //创建存储s的副本的stringstream对象,其中sstring类型的对象

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