字符串流

字符串流也叫内存流,以内存中用户定义的字符数组(字符串)为输入输出的对象。


输入输出缓冲区就是字符串流!!比如用cin读入的数据,一开始的时候是存储在输入缓冲区的,这个时候它是字符串流;当用变量对它进行提取的时候,就存储在内存中了,就是以二进制的形式保存了;最后用cout进行输出的时候也是先存放到输出缓冲区中,这时候也是字符串流。也就是字符串----------二进制------------字符串。



建立输出字符串流对象:

字符串流没有open成员函数,通过调用构造函数建立字符串流对象!!

ostrstream类的构造函数原型:

ostrstream::ostrstream(char* buffer, int n, int mode=ios::out);

buffer是指向字符数组首元素的指针;

n为指定的流缓冲区的大小(一般选与字符数组的大小相同,也可以不同)

mode指操作方式,默认为ios::out方式。


istrstream类的两个带参数的构造函数,原型为:

istrstream::istrstream(char* buffer);将字符数组buffer中的全部数据作为输入字符串流的内容

istrstream::istrstream(char* buffer,int n);只将字符数组buffer中的前n个字符作为输入字符串流的内容

buffer是指向字符数组首元素的指针,用它来初始化流对象(使流对象与字符数组建立关联)

n是流缓冲区的大小,可以只用字符数组中的一部分。


输入和输出中的buffer的区别在于输出中的buffer是等待被填充的,所以可以是空的;而输入中的buffer是被用来输入的,所以一定是有内容的!!!


建立输入输出字符串流对象:

strstream类提供的构造函数的原型为:

strstream::strstream(char* buffer,int n,int mode)

buffer是指向字符数组首元素的指针;

n为指定的流缓冲区的大小(一般选与字符数组的大小相同,也可以不同);

mode指操作方式,默认为ios::out方式。


“写”字符数组:


对于上面的程序来说,strout1就是说将字符串不是输出到缓冲区中,而是输出到strout1中,也就是字符数组c的前30字节中。(strout1使用的是字符数组c的前30字节的空间作为输出字符串流)而用ends为字符串流加上了以个结束符'\0',从而使得c中的字符串称为了一个完美的字符串。因此字符数组c相当于cout里面的输出缓冲区。因此我们操作的是计算机内存中的一段空间c,我们叫它字符串流。



以字符串流为中介交换数据:


对于上面的程序来书,strin和cin一样也是遇到空白字符就停止这一阶段的输入,并且忽略掉空白字符;c是字符串,可以转换成int型数组,最后再转换成字符串输出。过程中是以字符串流为中介的。

螺丝壳中做道场:以字符串流为中介,ASCII、二进制形式互相转换。


操作内存中的字符数组和文件的差异:

输出数据不是流向外存文件,而是流向内存中的一个存储空间;输入时从内存中的存储空间读取数据。这里的存储空间就是字符串流。(因为流就是一个字节一个字节进行操作,而一个字符正好占用一个字节,所以用字符数组来代表流这个对象)

字符串流对象关联的不是文件,而是内存中的一个字符数组,因此不需要打开和关闭文件。

每个文件的最后都有一个文件结束符,表示文件的结束;而字符串流所关联的字符数组中没有相应的结束标志,用户要指定一个特殊字符ends'\0'作为结束符,在向字符数组写入全部数据后要写入此字符。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值