类ostrstream 是用于执行串流的输出操作,该类中定义了多个重载的构造函数。
ostrstream();
ostrstream(char∗,int,int=ios::out);
其中,第一个是默认构造函数,它用来创建存放插入数据的对象数组的。第二个构造函数有3个参数,其中第一个是字符指针或字符数组,用来存放插入到输出流中的字符数组或字符指针;第二个参数用来指定这个数组最多能存放的字符个数;另一个参数给出流的方式,默认为out,还可以选择app和ate方式。
在进行插入操作时,一般不在输出流中的末尾自动添加空字符,需要时应显示添加空字符。
为实现串流的输出操作,ostrstream 类中又提供一些成员函数,其中,
int pcount()const{return rdbuf()- >out_waiting(); }返回输入流中已插入的字符个数。
inline char∗ str(){return rdbuf()- >str(); }返回标识存储串的数组对象的地址值。
【例7.11】ostrstream 类的构造函数示例。
学生成绩管理系统的功能需求包括:
1.成绩录入功能,录入信息包括:学号、姓名和成绩。
2.数据存放在磁盘文件Data.dat中。
3.系统提供从Data.dat文件数据的显示功能。
综合实训
I/O流
【实训目的】
1.理解流、流类、流类体系的概念。
2.学会用预定义格式控制函数设置输出格式。
3.掌握文本文件的使用方法。
4.掌握二进制文件的使用方法。
【实训内容】
1.请使用输出流格式控制成员函数将一个整数分别以十进制、八进制和十六进制输出,并控制输出数据前的基数符号的显示。如十进制的255可以表示为八进制的0377,表示为十六进制的0xff。
2.假设有一个文本文件中存放了一篇文章,其中有英文、数字、逗号和句号。编程统计并输出英文、数字、逗号、句号的个数以及文本的总行数。
3.产生一个二进制数据文件,将n-m 之间的所有素数写入文件data.dat中。从数据文件中读取二进制数据,并在显示器上以每行5个数的形式显示。
实验数据:
n=100
m=400
【实训设计】
1.分析:本题目考察操纵符的使用,ios_base::dec、ios_base::oct、ios_base::hex分别表示十进制、八进制和十六进制。
参考程序代码如下:
2.分析:本题目考察文件的打开、关闭、读操作和输出操作。
参考程序代码如下:
3.分析:本题目考察二进制文件的打开、关闭、读操作和输出操作。
项目小结
本项目中,我们学习了面向对象程序设计中的I/O流的基本知识。
C++中将数据传送的过程理解为流,定义了建立在面向对象基础上的处理数据输入输出的类族。其定义的对象成为流对象。根据受用对象的不同,I/O流大致分为标准I/O、文件I/O和串I/O三种。
标准I/O负责对系统指定的标准设备的输入输出。默认情况下,键盘为标准输入设备,显示器为标准输出设备。在iostream.h头文件中定义了标准I/O流的4个流对象。cin用来处理标准输入,即键盘输入;cout用来处理标准输出,通常是传送到显示器输出,但是也可以被重定向输出到磁盘文件;cerr用来处理标准错误信息,只能在显示器输出;clog也是标准出错流,它的作用与cerr相同,但clog中的信息可以存放在缓冲区中,缓冲区满了或遇到endl时向显示器输出,同时它也提供打印机输出。在标准I/O流中还有一些函数可供我们使用。get()函数,可以从输入流中获取一个字符。getline()函数,可以从输入流中获取多个字符。read()函数,可以从输入流中获取指定数目的字符。put()函数,可以把一个字符送到输出流。write()函数,可以把一个字符串送到输出流。此外C++I/O流有很多格式化字符,它们可以格式化所有I/O数据,而不仅仅是cout或cin中的数据。而常用的特殊字符的输出方法也需要我们记忆。
文件I/O负责以外存磁盘(光盘等)文件为对象进行输入输出。即负责从磁盘文件读取数据,经程序处理后再将数据输出到磁盘文件。文件的基本操作流程是打开、操作、关闭三步。文件操作又分为文本文件操作和二进制文件操作两种,同时对于文件是可以随机操作的。
串I/O,又称字符串输入输出,负责对内存中指定的空间进行输入输出。通常情况下,需要指定一个字符数组作为存储空间,以方便操作。C++提供了处理字符串流的两个类:ostrstream 和istrstream,这两个类都包含在strstrea.h文件中。
课后练习
一、填空题
1.在格式输出的标志字中,设置格式对齐位的有________、_______和_________。
2.在格式输出中,设置和清除格式标志位的成员函数分别是________和________。
3.系统规定与标准设备对应的4个流对象是_________、_________、________和_________。
4.在控制符中,用来指定八进制、十进制和十六进制的控制符分别是_________、_________和_________。
5.在定位读/写指针的带有两个参数的函数中,表示相对位置方式的3 个常量是_________、_______和________。
二、选择题
1.C++语言程序中进行文件操作时应包含的头文件是( )。
A.fstream.h B.math.h
C.stdli B.h D.strstrea.h
2.C++语言程序中进行字符串流操作时应包含的头文件是( )。
A.fstream.h B.math.h
C.stdli B.h D.strstrea.h
3.C++语言程序中使用控制符进行格式输出时应包含的头文件是( )。
A.fstream.h B.iomanip.h(www.daowen.com)
C.math.h D.strstrea.h
4.下列各语句是输出字符'A'的,其中错误语句是( )。
A.cout< < 'A'; B.cout.put('A');
C.char ch='A';cout< <ch; D.cout< <put('A');
5.在ios类中提供的控制格式的标志位中,八进制形式的标志位是( )。
A.hex B.dec
C.oct D.basefield
6.在打开磁盘文件的访问方式常量中,用来以追加方式打开文件的是( )。
A.in B.out
C.ate D.app()
7.在下列读写函数中,进行写操作的函数是( )。
A.get() B.read()
C.put() D.getline()
8.已知文本文件ab C.txt,以读方式打开,下列的操作中错误的是( )。
A.fstream infile("ab C.txt",ios::in);
B.ifstream infile("ab C.txt");
C.ofstream infile("ab C.txt");
D.fstream infile;infile.open("ab C.txt",ios::in);
9.已知:ifstream input;下列写出的语句中,将input流对象的读指针移到距当前位置后
(文件尾方向)100个字节处的语句是( )。
A.input.seekg(100,ios::beg);
B.input.seekg(100,ios::cur);
C.input.seekg(-100,ios::cur);
D.input.seekg(100,ios::end);
三、判断题
1.C++语言提供的文件操作包含文本文件和二进制文件。( )
2.预定义的提取符和插入符不可以再重载。( )
3.C++语言中的读写函数,不仅可用于标准文件,也可用于磁盘文件。( )
4.使用插入符输出一个字符串与使用write()成员函数输出一个字符串是没有差别的。( )
5.使用成员函数put()一次可写入一个字符串。( )
6.读取一个字符的成员函数get()是不可以带参数的。( )
7.读取一行字符的成员函数getline()具有一个默认的参数值'\n'。( )
8.使用read()成员函数一次只能读取一行字符。( )
9.输出数据的默认对齐方式是右对齐。( )
10.使用流对象的成员函数进行格式输出要比使用控制符进行格式输出复杂些,因为成员函数需要对象调用,而控制符可直接使用。( )
11.在非标准文件操作中,应该先定义流对象,再打开文件,必须使用open()函数。( )
12.关闭打开的文件时使用成员函数close(),该函数无参数。( )
13.进行二进制文件操作时,在打开文件方式中增加ios::binary选项。( )
14.在定位文件的读/写指针的操作中,只能向增加字节数的方向移动,不能向减少字节数的方向移动。( )
15.C++语言的文件操作中,既可以顺序读写,又可以随机读写。( )
16.读/写指针相关函数tellp()的返回值是一个long int型数,这表示当前读指针距文件尾的字节数。( )
17.在文件操作中,通常使用打开文件的流对象的值来判断打开文件是否成功。( )
18.文件结束函数eof()返回值为0时,表示文件结束。( )
四、使用C++语句实现下列各种要求
1.设置标志使得十六进制数中字母按大写格式输出。
3.按右对齐方式,域为5位,输出常整型数123,并使用'#'填充空位。
4.按域宽为i,精度为j(i和j为int型数),输出显示浮点数d。
5.使用前导0的格式显示输出域宽为10的浮点数1.2345。
资源推荐
1.C++网站 http://www.cplusplus.com
2.C++类库参考 https://msdn.microsoft.com/zh-cn/library/cscc687y.aspx
3.百度传课 http://www.chuanke.com/course/72351176561000448_______2.html
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。