`
qimo601
  • 浏览: 3449150 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

sstream和strstream以及fstream

阅读更多

在C++有两种字符串流,也称为数组I/O流,一种在sstream中定义,另一种在strstream中定义。
它们实现的东西基本一样。

strstream里包含
class strstreambuf;
class istrstream;
class ostrstream;
class strstream;
它们是基于C类型字符串char*编写的。

sstream中包含
class istringstream;
class ostringstream;
class stringbuf;
class stringstream;
class …….
它们是基于std::string编写的。

因此ostrstream::str()返回的是char*类型的字符串,而ostringstream::str()返回的是std::string类型的字符串。

在使用的时候要注意到二者的区别,一般情况下推荐使用std::string类型的字符串。
当然如果为了保持和C的兼容,使用strstream也是不错的选择。
但要记住一点,strstream虽仍然是C++语言标准的一部分,但已被C++标准宣称为“deprecated”,也就是不再提倡使用了,也说不定以后干粹就没了。 


1、先介绍一下sstream

//stringstream流以空格为边界符,使用其须包含sstream头文件
//istringstream 用法
istringstream istring;
string ss("ss 8346520");
istring.str(ss);
int i=0;
string s;
istring>>s>>i;
cout<<s<<" "<<i<<endl;
//或者
istringstream istring("ss 8346520");
int i=0;
string s;
istring>>s>>i;
cout<<s<<" "<<i<<endl;
//都将打印 s内容是ss,i内容是8346520的结果;

//ostringstream 用法
string s="test";
int i=8346520;
int j=0;
string s1;
ostringstream ostring;//不能写成ostringstream ostring<<s<<" "<<i;
ostring<<s<<" "<<i;
cout<<ostring.str()<<endl;//ostring流内保存内容是 test 8346520
istringstream istring(ostring.str());
istring>>s1>>j;//要注意此处的顺序;
cout<<s1<<"――――"<<j<<endl;

 
2、简单说说strstream:
        基于数组的类有istrstream、ostrstream和strstream。它们分别用来创建输入、输出和输入/输出流。这些类的基类之一是strstreambuf,它定义了派生类使用的几个底层的具体属性。
除了strstreambuf以外,istream 也是istrstream的基类。类ostrstream包括了类ostream。

strstream也包括了类iostream。所以,所有基于数组的类和“普通”I/O类一样存取相同的成员函数。

创建基于数组的输出流
要将一个输出流和一个数组关联起来,可使用下列ostream的构造函数:
ostrstream ostr(char *buf, int size, int mode=ios::out);
其中,buf是指向数组的指针,该数组接收写入流的字符。数组的长度由参数size确定。缺省
时,流以输出方式打开,但也可以将几项或在一起复合为所需的方式(例如,可以包含ios::
app使输出添加在数组中已存在的信息的尾部)。mode的缺省值可以满足大多数的要求。
一旦打开了一个基于数组的输出流,所有对这个流的输出就放在数组中。但是,任何输出都不能写到数组的限界之外,任何这种企图都会导致错误。
下面是一个介绍基于数组的输出流的简单程序。 

#include <iostream>
#include <strstream>
using namespace std;
int main()
{
	int arraysize=50;
	char *pbuffer=new char[arraysize];
	ostrstream ostr(pbuffer,arraysize,ios::out);
	ostr<<"Hello"<<" ";
	ostr<<99-14<<hex<<" ";
	ostr.setf(ios::showbase);
	ostr<<100<<ends; //使用ostrstream输出到流对象的时候,要用ends结束字符串
	cout<<pbuffer;
	delete[] pbuffer;
	return 0;
}

 
使用数组作输入:
要将输入流和数组关联起来,可使用下列istrstream的构造函数:
istrstream istr(char*buf);
其中,buf是指向数组的指针,该数组作为每次向流输入的字符源。 buf所指的数组必须以空结束。空结束符从不从数组中读取。


下面是一个用字符串输入的例子:

#include <iostream>
#include <strstream>
using namespace std;
int main()
{

	const char s[]="10 Hello 15 12.23 done";
	istrstream ins(s);
	int i;
	char str[80];
	float f;
	//reading: 10 Hello
	ins >>i;ins >>str;
	cout<<i<<" "<<str<<endl;
	// reading:f 12.23 done.
	ins>>i;
	ins>>f;
	ins>>str;
	cout<<hex<<i<<" "<<f<<" "<<str;
	return 0;
}
 
最后是文件i/o流:

//ifstream 用法 须包含fstream头文件
ifstream infile("in.txt");//或者ifstream infile;infile.open("1.txt");
infile.close();//fstream对象只能与1个文件关联,所以打开另外一个,必须关闭上一个;
infile.clear();//如果是循环创建fstream流的话,.close()和clear()函数就应该重视;
infile.open("d:/in1.txt");//文件夹地址应使用反斜杠;
if(infile){//使用前检测状态是个好习惯
	string s;
	infile>>s;//将读取文件里第1个单词;getline(infile,s);将读取文件里的第1行
	cout<<s<<endl;
}
 
//ofstream 用法
这里涉及很多文件模式,如下:
in――――――――――打开文件做读操作
out――――――――打开文件做写操作
app――――――-添加模式:在每次写之前找到文件尾
ate――――――――打开文件后立即将文件定位在文件尾
trunc――――-打开文件时清空已存在的文件流
binary――――以二进制模式进行IO操作
out,trunc,app只能用于ofstream和fstream对象关联的文件;
in模式只使用于ifstream和fstream对象关联的文件
所有的文件都可以用ate或binary模式打开;
默认时:ifsteam对象关联的文件以in模式打开;ofstream对象关联的文件以out模式打开,以out模式打开的文件会被清空;
string file="d:/out.txt";
ofstream outfile(file.c_str());//默认模式
outfile<<"hello world\n";
outfile.close();//注意close;
outfile.clear();
outfile.open(file.c_str(),ofstream::app);//显式更改文件模式,添加模式
outfile<<"\nhello world again!";
 

 

分享到:
评论

相关推荐

    strstream.h

    strstream.h

    C语言头文件 strstream

    C语言头文件 strstreamC语言头文件 strstreamC语言头文件 strstreamC语言头文件 strstreamC语言头文件 strstreamC语言头文件 strstreamC语言头文件 strstreamC语言头文件 strstreamC语言头文件 strstreamC语言头文件...

    C++标准库中sstream与strstream的区别详细解析

    在C++有两种字符串流,一种在sstream中定义,另一种在strstream中定义。它们实现的东西基本一样。...class stringstream;class …….它们是基于std::string编写的 因此ostrstream::str()返回的是char*类

    习题10及其解答(第二版).doc

    6. `strstream` 类:在C++中,`strstream` 类族包括`istringstream`、`ostringstream` 和 `strstream`,它们允许通过字符串进行输入输出操作。但在C++11之后,这些类已被替换为更现代的`istringstream`、`...

    c标准输入输出

    输出字符串流类ostrstream同时继承了输出流类和字符串流基类,输入输出流类iostream同时继承了输入流类和输出流类,输入输出文件流类fstream同时继承了输入输出流类和文件流基类,输入输出字符串流类strstream同时...

    C++程序设计基础PPT课件10-输入输出流

    这两个类又进一步派生出具体的流类,如`iostream`(同时支持输入和输出)、`fstream`(文件流)、`strstream`(字符串流)以及与它们对应的带有`assign`操作的版本,如`ifstream`、`istringstream`、`ofstream`、`...

    STD_lib.zip

    9. **字符串流(strstream)**:`strstream`是C++早期版本中处理内存中字符串的流类,它结合了`stringstream`、`istringstream`和`ostringstream`的功能。虽然在C++11中被推荐使用`std::stringstream`替代,但在一些旧...

    c++讲义,很好的资料

    字符串流是C++流库中的一个重要组成部分,它允许直接对字符串进行I/O操作,通常通过`strstream`类及其派生类`istrstream`和`ostrstream`实现。这对于处理内存中的数据非常有用。 总结来说,C++的I/O流库提供了一套...

    酒店管理系统 C++课程设计报告.doc

    例如,除了iostream库,学生还需要了解fstream库用于文件输入输出,以及strstream库用于字符串流操作。在实际编写代码时,可能会遇到选择课题时预估不足的情况,实际实现比预期复杂。尽管如此,通过查阅相关资料,如...

    断点续传示例源码整理

    strStream: TStringStream; {保存所有的数据} FSocketStream: TWinSocketStream;begin strStream := TStringStream.Create(‘‘); FSocketStream := TWinSocketStream.Create(Socket, TimeOut); while Socket....

    C++课程设计报告--酒店管理系统.docx

    此外,作者了解到输入输出流的不同类型,如iostream、fstream和strstream,并意识到实际编程中需要应用书本上学到的知识。 在【参考书目】中,提到了两本教材,分别是谭浩强的《C++程序设计》和詹红霞等人编写的...

    C++课程设计报告--酒店管理系统.pdf

    此外,课程设计过程中还涉及到对C++输入输出流的深入学习,如iostream、fstream和strstream等,以及如何将程序保存到磁盘。 【解决困难的方法】包括向同学求助,从他们的经验中学习,以及参考相关教材。尽管初期...

    C++程序设计课件 ch13输入输出流

    头文件是程序与类库的接口,iostream类库的接口分别由不同的头文件实现,包括iostream、fstream、strstream、stdiostream和iomanip等。iostream头文件定义了基本的输入输出流操作,fstream用于文件I/O,strstream...

    c++文件操作,输入输出

    - `ifstream`、`ofstream`和`fstream`:分别用于文件的只读、只写和读写操作。 - `istrstream`、`ostrstream`和`strstream`:支持内存中的字符串流操作。 例如,下面的代码片段展示了如何使用预定义的输入/输出流...

    第10章 输入输出流.ppt

    - **字符串 I/O 流类库**:`ostrstream`,`istrstream` 和 `strstream` 支持内存中的字符串输入输出。 3. **头文件** - `iostream.h`:基础输入输出操作,包括无格式和格式化的 I/O。 - `fstream.h`:文件流操作...

    c++标准库简介(数据流)

    iostream库还包括其他一些头文件,如`fstream`、`sstream`和`strstream`,它们扩展了基本的流操作,支持文件输入输出和字符串流处理。 - `fstream`库提供了`ifstream`和`ofstream`类,分别用于读取文件和写入文件。...

    计算器的C++实现

    需要注意的是,代码片段中存在一些非标准的C++内容,如使用了已被废弃的头文件和&lt;fstream.h&gt;,以及包含了特定编译器的头文件&lt;strstream.h&gt;的前身&lt;fstream.h&gt;。在现代C++编程实践中,推荐使用、和等新标准的头文件。...

    流类库与输入输出环境

    - iostream.h包含了基本的输入/输出流对象(cin、cout、cerr和clog),以及无格式和格式化的I/O功能。 - iomanip.h提供了格式化I/O的操纵符,用于控制数据的输出格式。 - fstream.h则包含了处理文件I/O的相关函数和...

    C++面向对象程序设计讲稿.pptx

    本讲稿主要涵盖了五个关键章节,分别是C++的输入和输出、标准输出流、标准输入流、文件操作与文件流以及字符串流。 首先,C++的输入和输出是程序与外部世界的交互方式。在C++中,输入输出不仅仅是针对键盘和显示器...

Global site tag (gtag.js) - Google Analytics