七月网

ostringstream(ostringstream用法)

七月网4030

一、c++里的头文件sstream 与fstream有什么区别

其实两个都是C++文件流的分支,在C++有一个stream这个类,所有的I/O都以这个“流”类为基础的,也就是他的子类。

ostringstream(ostringstream用法)

在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:

void open(const char* filename,int mode,int access);

打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:

ios::app:以追加的方式打开文件

ios::ate:文件打开后定位到文件尾,ios:app就包含有此属性

ios::binary:以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文

ios::nocreate:不建立文件,所以文件不存在时打开失败

ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败

ios::trunc:如果文件存在,把文件长度设为0

可以用“或”把以上属性连接起来,如ios::out|ios::binary

可以用“或”或者“+”把以上属性连接起来,如3或1|2就是以只读和隐含属性打开文件。

例如:以二进制输入方式打开文件c:config.sys

file1.open("c:config.sys",ios::binary|ios::in,0);

如果open函数只有文件名一个参数,则是以读/写普通文件打开,即:

file1.open("c:config.sys");<=>file1.open("c:config.sys",ios::in|ios::out,0);

另外,fstream还有和open()一样的构造函数,对于上例,在定义的时候就可以打开文件了:

fstream file1("c:config.sys");

特别提出的是,fstream有两个子类:ifstream(input file stream)和ofstream(outpu file stream),ifstream默认以输入方式打开文件,而ofstream默认以输出方式打开文件。

ifstream file2("c:pdos.def");//以输入方式打开文件

ofstream file3("c:x.123");//以输出方式打开文件

所以,在实际应用中,根据需要的不同,选择不同的类来定义:如果想以输入方式打开,就用ifstream来定义;如果想以输出方式打开,就用ofstream来定义;如果想以输入/输出方式来打开,就用fstream来定义。

打开的文件使用完成后一定要关闭,fstream提供了成员函数close()来完成此操作,如:file1.close();就把file1相连的文件关闭。

读写文件分为文本文件和二进制文件的读取,对于文本文件的读取比较简单,用插入器和析取器就可以了;而对于二进制的读取就要复杂些,下要就详细的介绍这两种方式

文本文件的读写很简单:用插入器(<<)向文件输出;用析取器(>>)从文件输入。假设file1是以输入方式打开,file2以输出打开。示例如下:

file2<<"I Love You";//向文件写入字符串"I Love You"

file1>>i;//从文件输入一个整数值。

这种方式还有一种简单的格式化能力,比如可以指定输出为16进制等等,具体的格式有以下一些

dec格式化为十进制数值数据输入和输出

endl输出一个换行符并刷新此流输出

hex格式化为十六进制数值数据输入和输出

oct格式化为八进制数值数据输入和输出

setpxecision(int p)设置浮点数的精度位数输出

比如要把123当作十六进制输出:file1<<hex<<123;要把3.1415926以5位精度输出:file1<<setpxecision(5)<<3.1415926。

其实他与fstream类的用法十分相似,只不过把输入输出的目标由文件改为了字符串;

Creates a type basic_istringstream specialized on a char template parameter.

Creates a type basic_ostringstream specialized on a char template parameter.

Creates a type basic_stringbuf specialized on a char template parameter.

Creates a type basic_stringstream specialized on a char template parameter.

Creates a type basic_istringstream specialized on a wchar_t template parameter.

Creates a type basic_ostringstream specialized on a wchar_t template parameter.

Creates a type basic_stringbuf specialized on a wchar_t template parameter.

Creates a type basic_stringstream specialized on a wchar_t template parameter.

以下是一个小例子,看看是不是理解:将num中的数字输入到bob这个我们定义的字符串读写流中,然后再将bob输出到字符串str中:

二、stringstream的用法

stringstream的基本用法\x0d\x0a\x0d\x0astringstream是字符串流。它将流与存储在内存中的string对象绑定起来。\x0d\x0a在多种数据类型之间实现自动格式化。\x0d\x0a\x0d\x0a1.stringstream对象的使用\x0d\x0a\x0d\x0a#include\x0d\x0a#include\x0d\x0ausing namespace std;\x0d\x0aint main()\x0d\x0a{\x0d\x0a string line,word;\x0d\x0a while(getline(cin,line))\x0d\x0a{\x0d\x0a stringstream stream(line);\x0d\x0a cout<<stream.str()<>word){cout<<word<<endl;}\x0d\x0a}\x0d\x0a return 0;\x0d\x0a}\x0d\x0a\x0d\x0a输入:shanghai no1 school 1989\x0d\x0a输出:shanghi no1 school 1989\x0d\x0a shanghai\x0d\x0a no1\x0d\x0a school\x0d\x0a 1989\x0d\x0a\x0d\x0a2.stringstream提供的转换和格式化\x0d\x0a程序:\x0d\x0a\x0d\x0a#include\x0d\x0a#include\x0d\x0ausing namespace std;\x0d\x0aint main()\x0d\x0a{\x0d\x0a int val1= 512,val2=1024;\x0d\x0a stringstream ss;\x0d\x0a ss<<"val1:"<<val1<<endl//“val1:"此处有空格,字符串流是通过空格判断一个字符串的结束\x0d\x0a<<"val2:"<<val2<<endl;\x0d\x0a cout<>dump>>a\x0d\x0a>>dump>>b;\x0d\x0a cout<<a<<""<<b<<endl;\x0d\x0a return 0;\x0d\x0a}\x0d\x0a\x0d\x0a输出为:val1: 512\x0d\x0aval2: 1024\x0d\x0a512 1024\x0d\x0a第一处黑体字部分:将int类型读入ss,变为string类型\x0d\x0a第二处黑体字部分:提取512,1024保存为int类型。当然,如果a,b声明为string类型,那么这两个字面值常量相应保存为string类型\x0d\x0a\x0d\x0a3.其他注意\x0d\x0astringstream不会主动释放内存(或许是为了提高效率),但如果要在程序中用同一个流,反复读写大量的数据,将会造成大量的内存消耗,因些这时候,需要适时地清除一下缓冲(用 stream.str(""))\x0d\x0a\x0d\x0a#include\x0d\x0a#include\x0d\x0a#include\x0d\x0ausing namespace std;\x0d\x0aint main()\x0d\x0a{\x0d\x0a stringstream ss;\x0d\x0a string s;\x0d\x0a ss<>s;\x0d\x0a cout<<"size of stream="<<ss.str().length()<<endl;\x0d\x0a cout<<"s:"<<s<<endl;\x0d\x0a ss.str("");\x0d\x0a cout<<"size of stream="<<ss.str().length()<<endl;\x0d\x0a}\x0d\x0a\x0d\x0a输出:\x0d\x0asize of stream= 19\x0d\x0as: shanghai\x0d\x0asize of stream= 0

三、c++中 string ss;是什么意思,谢谢

1、这个是空的字符串,可赋值,有一堆函数操作

2、b) string s(str)//拷贝构造函数生成str的复制品

3、c) string s(str,stridx)//将字符串str内“始于位置stridx”的部分当作字符串的初值

4、d) string s(str,stridx,strlen)//将字符串str内“始于stridx且长度顶多strlen”的部分作为字符串的初值

5、e) string s(cstr)//将C字符串作为s的初值

6、f) string s(chars,chars_len)//将C字符串前chars_len个字符作为字符串s的初值。

7、g) string s(num,c)//生成一个字符串,包含num个c字符

8、h) string s(beg,end)//以区间beg;end(不包含end)内的字符作为字符串s的初值

9、i) s.~string()//销毁所有字符,释放内存

OK,本文到此结束,希望对大家有所帮助。