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. css框模型

    元素的背景是内容.内边距和边框区的背景. css中:width 和 height 指的是内容区域的宽度和高度.增加内边距.边框和外边距不会影响内容区域的尺寸,但是会增加元素框的总尺寸. bootstr ...

  2. Boost C++: 数据结构---tuple

    #include <boost/tuple/tuple.hpp> #include <boost/tuple/tuple_io.hpp> #include <boost/ ...

  3. std::cout彩色输出

    Mac OS效果 Windows 效果 想写这个东西其实是因为最近要写个命令行的工具,但是有个问题是什么呢?就是传统的那个黑漆漆的窗口看起来很蛋疼.并且完全看不到重点,于是就想起 来这么一个东西.相对 ...

  4. SAS 5/iR Adapter 驱动下载

    http://www.dell.com/support/home/cn/zh/cnbsd1/Drivers/DriversDetails?driverId=FF6F6

  5. wifi热点共享 3G网络

    本文描述一些iptables的基础知识和使用方法.最后记录一个wifi共享3G上网,以及禁止wifi内某个IP通过3G联网的例子. 一. 在Linux系统中,防火墙,网址转换(NAT),数据包记录以及 ...

  6. javaSE第二天

    第二天    7 1:关键字(掌握)    7 2:标识符(掌握)    7 (1)就是给类,接口,方法,变量等起名字的字符序列    7 (2)组成规则:    7 (3)注意事项:    8 (4 ...

  7. 基本的Web控件三

    基本的Web控件用法一 ListBox控件 页面布局: <div> <h1>ListBox控件</h1> 学生列表: <br/> <asp:Lis ...

  8. 【风马一族_C】c语言版,在2到n中寻找出所有的素数

    #include <iostream> #include <stdio.h> #include <math.h> /* run this program using ...

  9. nodejs前端自动化构建

    http://99jty.com/?p=1257 http://www.jankerli.com/?p=1628 http://www.cnblogs.com/zhepama/archive/2013 ...

  10. 【积硅计划】http协议基础

    http:超文本传输协议,它允许将超文本标记(html)文档从web服务器传送到浏览器.目前版本HTTP/1.1   http请求过程:   proxy:代理服务器,网络信息的中转站.功能如下:   ...