字符串流sstream[part1/基本知识]
C++中的输入输出分为三种:基于控制台的I/O,即istream、ostream、iostream;基于文件的I/O,即ifstream、ofstream、fstream;基于字符串的I/O,即istringstream、ostringstream、stringstream.
C++引入了ostringstream、istringstream、stringstream这三个类,要使用它们创建对象就必须包含头文件sstream。其中ostringstream继承自ostream、istringstream继承自istream、stringstream继承自iostream。这三个类内部除了拥有string buffer之外,还保持了一系列的从ios_base和ios继承而来的格式化字段,因此可以格式化输入/输出。
ostringstream的构造
ostringstream (ios_base::openmode which = ios_base::out);
ostringstream (const string& str, ios_base::openmode which = ios_base::out);
ostringstream的方法
string str() const; -- 将字符串缓冲区中的内容复制到一个string对象中,并返回该对象
void str(const string& s); -- 清除缓冲区原有数据并将字符串s送入字符串缓冲区
istringstream的构造
istringstream (ios_base::openmode which = ios_base::in);
istringstream (const string& str, ios_base::openmode which = ios_base::in);
istringstream的方法
string str() const; -- 将字符串缓冲区中的内容复制到一个string对象中,并返回该对象
void str(const string& s); -- 清除缓冲区原有数据并将字符串s送入字符串缓冲区
stringstream的构造
stringstream (ios_base::openmode which = ios_base::in | ios_base::out);
stringstream (const string& str, ios_base::openmode which = ios_base::in | ios_base::out);
stringstream的方法
string str() const; -- 将字符串缓冲区中的内容复制到一个string对象中,并返回该对象
void str(const string& s); -- 清除缓冲区原有数据并将字符串s送入字符串缓冲区
注:
1.openmode取值为ios_base::in、ios_base::out、ios::base::ate,其他几种openmode如ios_base::app、ios_base::trunc是否有效取决于库的实现;
2.字符串流的ios_base::out并不会像文件流中的那样自动清除原有内容(因为文件流中只有ios::out时相当于ios::out | ios::trunc,而字符串流中则不会)
3.str()方法会保持openmode不变;
#include <iostream>
#include <sstream>
#include <iomanip>
using namespace std;
int main()
{
//ostringstream类
ostringstream foo; //构造方式一
ostringstream bar("hello", ios_base::ate); //构造方式二
foo.str("Test string"); //清空原有数据并将Test string送入foo的string buffer中,此时内容为Test string
bar.str("Test string"); //清空原有数据并将Test string送入bar的string buffer中,此时内容为Test string
foo<<; //将101送入foo的string buffer中,此时foo的string buffer中的内容为101t string
bar<<; //将101送入bar的string buffer中,此时bar的string buffer中的内容为Test string101
cout<<foo.str()<<endl; //101t string
cout<<bar.str()<<endl; //Test string101 cout<<endl; //istringstream类
istringstream istr1; //构造方式一
istringstream istr2("hello", ios_base::ate); //构造方式二
istr1.str("Test string"); //清空原有数据并将Test string送入istr1的string buffer中,此时内容为Test string
istr2.str("Test string"); //清空原有数据并将Test string送入istr2的string buffer中,此时内容为Test string
string word;
while(istr1>>word) //逐单词读取istr1的string buffer中的数据
cout<<word<<endl; //Test\nstring
cout<<endl;
while(istr2>>word) //逐单词读取istr2的string buffer中的数据
cout<<word<<endl; //Test\nstring cout<<endl; //stringstream类
stringstream ss;
ss<<<<" "<<;
int x, y;
ss>>x>>y;
cout<<"x:"<<x<<"\n"<<"y:"<<y<<endl; cout<<endl; //格式化
ostringstream out;
char* str = "hello world";
float num = 314.57f;
out<<setprecision()<<fixed<<str<<num<<endl; //此处endl也将被送入string buffer
cout<<out.str();
cout<<"format output complete.\n"; system("pause");
return ;
}
字符串流sstream[part1/基本知识]的更多相关文章
- 字符串流sstream[part2/使用同一个字符串流反复读写数据]
stringstream构造函数会特别消耗内存,似乎不打算主动释放内存(或许是为了提高效率),如果你要在程序中使用同一个流反复读写大量数据,将会造成大量的内部消耗,因此建议: 1:调用clear ...
- c++ 字符串流 sstream(常用于格式转换) 【转载】
使用stringstream对象简化类型转换C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高级的一些功能,即单纯性.类型安全和可扩展性.在本文中, ...
- 字符串流sstream[part3/使用字符串流进行安全的类型转换]
参考: http://blog.163.com/zhuandi_h/blog/static/180270288201291710222975/ http://www.cnblogs.com/games ...
- c++ 字符串流 sstream(常用于格式转换) 分类: C/C++ 2014-11-08 17:20 150人阅读 评论(0) 收藏
使用stringstream对象简化类型转换 C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高级的一些功能,即单纯性.类型安全和可扩展性.在本文中 ...
- 字符串流stringstream(头文件sstream)
今天看到一样很有趣的东西,可以用于各种类型的转换.其实一个文本可以看作一个长长的字符串,整数啊浮点数的都是字符串,于是在字符串流里面就可以很方便地玩转各种类型,比如说: #include<ios ...
- c++ 控制台流和字符串流
前言 上一章节简单介绍c++中关于流的概念,这两章节将重点讲解如何使用,本章讲解控制台流和字符串流. 控制台输出流 输出流定义在头文件中,使用输出流最简单的方法就是 使用<<运算符.通过你 ...
- 流类库继承体系(IO流,文件流,串流)和 字符串流的基本操作
一.IO.流 数据的输入和输出(input/output简写为I/O) 对标准输入设备和标准输出设备的输入输出简称为标准I/O 对在外存磁盘上文件的输入输出简称为文件I/O 对内存中指定的字符串存储空 ...
- stringstream类操作字符串流
C++ Code 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...
- C++ 学习笔记之——字符串和字符串流
1. 字符数组 字符数组,也就是存放字符类型数据的数组,只不过字符数组的结尾必须是 '\0'.C++ 已经提供了一些字符串处理函数,这些函数被封装在头文件 和 <string.h> 中. ...
随机推荐
- C# 多线程---------<一>
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Android IOS WebRTC 音视频开发总结(六三)-- 2016国内IM云服务行业分析
本文主要国内IM云服务行业分析,文章最早发表在我们的微信公众号上,详见这里,欢迎关注微信公众号blackerteam,更多详见www.blackerteam.com 谈到IM我们最先想到的是qq和微信 ...
- Ajax的利弊
ajax的优点 1.最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好. 2.使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力. 3.可以把以前一些服务器负担的工 ...
- SQL中补0
SQL中补0 编写人:CC阿爸 2014-3-14 第一种方法: right('00000'+cast(@count as varchar),5) 其中'00000'的个数为right函数的最后参数 ...
- 三种找回 linux root密码
找回 linux root密码的三种方法 第1种方法: 1.在系统进入单用户状态,直接用passwd root去更改2.用安装光盘引导系统,进行linux rescue状态,将原来/分区挂接上来,作法 ...
- mysql基本数据类型(mysql学习笔记三)
Mysql数据类型 小数: 浮点:小数位可以变化 Float单精度默认精度6位左右 Double 双精度默认精度16位左右 支持,控制数值范围 Type(M,D) M表示所有数值位数(不包括小数点和符 ...
- 关于js一般对象与标配对象
当一个js函数对象被创建时,Function 构造器产生的函数对象会运行类似这样的一些代码 this.prototype={constructor:this} 新函数被赋予了一个prototype属性 ...
- C++求等比数列之和
题目内容:已知q与n,求等比数列之和:1+q+q2+q3+q4+……+qn. 输入描述:输入数据不多于50对,每对数据含有一个整数n(1<=n<=20).一个小数q(0<q<2 ...
- psd图片到html
正确的做法是:拿到psd后,先不要做别的,直接在文本编辑器中将网页的框架写出来,不要假设这块将来css要去怎么渲染,完全自然化的标签,不加任何的css.写完之后在各个浏览器运行之后确保大体定位都没有问 ...
- 【转】MessageBox
MessageBox对话框是比较常用的一个信息对话框,其不仅能够定义显示的信息内容.信息提示图标,而且可以定义按钮组合及对话框的标题,是一个功能齐全的信息对话框. 1.函数原型及参数 function ...