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/基本知识]的更多相关文章

  1. 字符串流sstream[part2/使用同一个字符串流反复读写数据]

    stringstream构造函数会特别消耗内存,似乎不打算主动释放内存(或许是为了提高效率),如果你要在程序中使用同一个流反复读写大量数据,将会造成大量的内部消耗,因此建议:    1:调用clear ...

  2. c++ 字符串流 sstream(常用于格式转换) 【转载】

    使用stringstream对象简化类型转换C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高级的一些功能,即单纯性.类型安全和可扩展性.在本文中, ...

  3. 字符串流sstream[part3/使用字符串流进行安全的类型转换]

    参考: http://blog.163.com/zhuandi_h/blog/static/180270288201291710222975/ http://www.cnblogs.com/games ...

  4. c++ 字符串流 sstream(常用于格式转换) 分类: C/C++ 2014-11-08 17:20 150人阅读 评论(0) 收藏

    使用stringstream对象简化类型转换 C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高级的一些功能,即单纯性.类型安全和可扩展性.在本文中 ...

  5. 字符串流stringstream(头文件sstream)

    今天看到一样很有趣的东西,可以用于各种类型的转换.其实一个文本可以看作一个长长的字符串,整数啊浮点数的都是字符串,于是在字符串流里面就可以很方便地玩转各种类型,比如说: #include<ios ...

  6. c++ 控制台流和字符串流

    前言 上一章节简单介绍c++中关于流的概念,这两章节将重点讲解如何使用,本章讲解控制台流和字符串流. 控制台输出流 输出流定义在头文件中,使用输出流最简单的方法就是 使用<<运算符.通过你 ...

  7. 流类库继承体系(IO流,文件流,串流)和 字符串流的基本操作

    一.IO.流 数据的输入和输出(input/output简写为I/O) 对标准输入设备和标准输出设备的输入输出简称为标准I/O 对在外存磁盘上文件的输入输出简称为文件I/O 对内存中指定的字符串存储空 ...

  8. stringstream类操作字符串流

     C++ Code  12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...

  9. C++ 学习笔记之——字符串和字符串流

    1. 字符数组 字符数组,也就是存放字符类型数据的数组,只不过字符数组的结尾必须是 '\0'.C++ 已经提供了一些字符串处理函数,这些函数被封装在头文件 和 <string.h> 中. ...

随机推荐

  1. IIS报错 未将对象引用设置到对象的实例。

    在vs中运行正常的项目 ,发布到IIS总是提示 未将对象引用设置到对象的实例. 运行静态页面 html正常,只是打开.aspx页面的时候报错,在确保了数据库,配置,权限均正常的情况下. 错误原因:先安 ...

  2. 无DLL远程注入

    界面如下: 主要代码如下: #define STRLEN 20 typedef struct _DATA { DWORD dwLoadLibrary; DWORD dwGetProcAddress; ...

  3. C\C++ 框架和库整理(转)

    [本文系外部转贴,原文地址:http://coolshell.info/c/c++/2014/12/13/c-open-project.htm]留作存档 下次造轮子前先看看现有的轮子吧 值得学习的C语 ...

  4. PHP版实现友好的时间显示方式(例如:2小时前)

    完整php类,通常我会配合smary使用,快捷使用 (plugins/function.rdate.php),更多php技术开发就去php教程网,http://php.662p.com <?PH ...

  5. jquery 读取xml

    <script type="text/javascript" src="jquery/jquery-1.11.3.min.js"></scri ...

  6. ThinkPHP整合支付宝即时到账接口调用

    首先是在支付宝的蚂蚁金服开放平台下载PHP的demo: https://doc.open.alipay.com/doc2/detail?treeId=62&articleId=103566&a ...

  7. Ueditor防止代码自动清除

    Ueditor功能真的很牛逼,可也有让人悲催的地方,尤其是自动清除代码,会将你默认的div标签改成p,挺让人闹心的,不过Ueditor的开发人员还是满热心的,搜遍网上无答案的时候,问了下他们,解决了 ...

  8. 部署到iis后,发现无法加载运行CSS文件

    解决方法: 打开或关闭window功能中的Internet信息服务里的万维网服务=>常见HTTP功能=>静态内容

  9. scrapy爬虫框架入门教程

    scrapy安装请参考:安装指南. 我们将使用开放目录项目(dmoz)作为抓取的例子. 这篇入门教程将引导你完成如下任务: 创建一个新的Scrapy项目 定义提取的Item 写一个Spider用来爬行 ...

  10. 自学Python三 Python中的屠龙刀(续)

    装饰器: 在函数代码功能运行期间动态增加功能的方式叫做装饰器(Decorator).它对一个函数或者类进行再加工. 我们先定义两个函数,一个计算两数和,一个计算两数差. >>> de ...