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. Linux下查看文件属性

    1.ls ls -a 查看所有文件,就是包含隐藏文件 ls -l 查看详细的属性,包括文件类型(d表示目录,-表示普通文件,l表示链接文件),文件的权限(所有者权限,所属组权限,其他人权限),所有者, ...

  2. 二十一、contextMap中放的常用数据

    二十一.contextMap中放的常用数据 request:请求范围的数据.即ServletRequest中的那个Map parameters:请求参数的数据.即request.getParamete ...

  3. Muzei Live Wallpaper壁纸应用安卓源码项目

    这个刚刚在安卓教程网那里看到的,这个是Muzei Live Wallpaper壁纸应用源码,这是已经在Playstore上线了的android壁纸应用,点击壁纸界面可以磨砂透明效果以及一般背景效果之间 ...

  4. sqlite:多线程操作数据库“database is locked”解决方法(二)

    上一篇博客<sqlite:多线程操作数据库“database is locked”解决方法>通过注册延时函数的方法来处理数据库被锁的问题.此方法固然能解决问题,但是在多个线程向数据库写入大 ...

  5. CentOS-6.4无线上网命令行配置

      参考:http://www.vfeelit.com/504.html 待连接的WIFI的ssid为“thm”,密码为12345678,认证方式为WPA2-PSK   1. 检查无线网卡驱动是否安装 ...

  6. Aspose.cell.dll的使用,导excel表

    using System; using System.Web; using EF; using Newtonsoft.Json; using System.Collections.Generic; u ...

  7. 01-实现图片按钮的缩放、动画效果(block的初步应用)

    #import "ViewController.h" #define kDelta 60 @interface ViewController () @end @implementa ...

  8. 掌握iOS自动布局

    1,自动布局是一种基于约束的布局(constraint-based layout)引擎,它可以根据开发者在对象上的约束自动调整大小与位置. 2.在iOS 6之前使用的布局模型是“spring& ...

  9. c#中判断对象为空的几种方式(字符串等)

    (1)先了解几个与空类型相关的关键字和对象  Null : 关键字表示不引用任何对象的空引用,它是所有引用类型变量的默认值,在2.0版本之前也就只有引用变量类型可以为null,如(string a=n ...

  10. 【转】一个高端.NET技术人才的2014年度总结

    [转]一个高端.NET技术人才的2014年度总结  本人在一家公司做技术负责人.主要从事的是.net方面的开发与管理,偏重开发. 弹指一挥间,时间飘然而过,转眼又是一年. 回顾2014年,是我人生中最 ...