C++字符串流保存数据
文件流是以外存文件为输入输出对象的数据流。字符串流是以内存中用户定义的字符数组(字符串)为输入输出对象的。
建立输出字符串流:
ostrstream strout(c,sizeof(c));第一个参数是字符数组首元素的指针,第二个参数为指定的流缓冲区的大小(一般选与字符数组c的大小相同)
建立输入字符串流:
istrstream strin(c,sizeof(c));第一个参数是字符数组首元素的指针,第二个参数为指定的流缓冲区的大小(一般选与字符数组c的大小相同)
下面看一个例子:
在一个字符数组c中存放了10个整数,以空格相间隔,要求将它们放到整形数组中,在按大小排序,然后再存放回字符数组c中。
#include<strstream> #include<iostream> using namespace std; int main() { char c[50]="12 34 65 -23 -32 33 61 99 321 32"; int a[10],i,j,temp; cout<<"array c: "<<c<<endl; //显示字符数组的字符串 istrstream strin(c,sizeof(c)); //建立输入串流对象strin并与字符数组c关联 for(i=0;i<10;i++) { strin>>a[i]; //从字符数组c中读取10个证书赋给整型数组a } cout<<endl; //冒泡排序 for(i=0;i<9;i++) { for(j=9;j>i;j--) { if(a[j]<a[j-1]) { temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; } } } ostrstream strout(c,sizeof(c));//建立输出串流对象strout并与字符数组c关联 for(i=0;i<10;i++) { strout<<a[i]<<" "; } cout<<endl; cout<<"array c: "<<c<<endl; return 0; }
输出结果:
/* array c: 12 34 65 -23 -32 33 61 99 321 32 array c: -32 -23 12 32 33 34 61 65 99 321 */
说明:字符数组中的空格是为了在strin读取字符串的时候,分割数字用的。
看了上面的例子,有人或许就想了(其实我一开始就这样认为=。=),我为啥要费这个劲,不直接定义一个int型的数组,这样不是更方便么?但它的意义在于我们可以通过字符串流将整数、浮点数、以及其他类型的数据等存放到字符数组中,相当于是一个万能的容器吧~