摘自:http://www.cnblogs.com/lancidie/archive/2010/12/03/1895161.html

C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。

  istringstream类用于执行C++风格的串流的输入操作。 
ostringstream类用于执行C风格的串流的输出操作。 
strstream类同时可以支持C风格的串流的输入输出操作。

   istringstream类是从istream和stringstreambase派生而来,ostringstream是从ostream和 stringstreambase派生而来, stringstream则是从iostream类和stringstreambase派生而来。

  他们的继承关系如下图所示:

  istringstream是由一个string对象构造而来,istringstream类从一个string对象读取字符。 
istringstream的构造函数原形如下: 
istringstream::istringstream(string str);

#i nclude <iostream> 
#i nclude <sstream> 
using namespace std; 
int main()   

istringstream istr; 
istr.str("1 56.7",); 
    //上述两个过程可以简单写成 istringstream istr("1 56.7"); 
    cout << istr.str()<<endl; 
    int a; 
    float b; 
istr>>a; 
    cout<<a<<endl; 
istr>>b; 
    cout<<b<<endl; 
system("pause"); 
}

  上例中,构造字符串流的时候,空格会成为字符串参数的内部分界,例子中对a,b对象的输入"赋值"操作证明了这一点,字符串的空格成为了整型数据与浮点型数据的分解点,利用分界获取的方法我们事实上完成了字符串到整型对象与浮点型对象的拆分转换过程。

  str()成员函数的使用可以让istringstream对象返回一个string字符串(例如本例中的输出操作(cout<<istr.str();)。

  ostringstream同样是由一个string对象构造而来,ostringstream类向一个string插入字符。 
ostringstream的构造函数原形如下: 
ostringstream::ostringstream(string str);

示例代码如下:

#i nclude <iostream> 
#i nclude <sstream> 
#i nclude <string> 
using namespace std; 
int main()   

ostringstream ostr; 
    //ostr.str("abc");//如果构造的时候设置了字符串参数,那么增长操作的时候不会从结        尾开始增加,而是修改原有数据,超出的部分增长 
ostr.put('d'); 
ostr.put('e'); 
ostr<<"fg";

string gstr = ostr.str(); 
    cout<<gstr; 
system("pause"); 
}

   在上例代码中,我们通过put()或者左移操作符可以不断向ostr插入单个字符或者是字符串,通过str()函数返回增长过后的完整字符串数据,但值 得注意的一点是,当构造的时候对象内已经存在字符串数据的时候,那么增长操作的时候不会从结尾开始增加,而是修改原有数据,超出的部分增长。
[ basic_stringbuf::str : 
Sets or gets the text in a string buffer without changing the write position. ]

  对于stringstream了来说,不用我多说,大家也已经知道它是用于C++风格的字符串的输入输出的。 
stringstream的构造函数原形如下:

  stringstream::stringstream(string str);

  示例代码如下:

#i nclude <iostream> 
#i nclude <sstream> 
#i nclude <string> 
using namespace std;

int main()   

stringstream ostr("ccc"); 
ostr.put('d'); 
ostr.put('e'); 
ostr<<"fg"; 
string gstr = ostr.str(); 
cout<<gstr<<endl;

char a; 
ostr>>a; 
cout<<a

system("pause"); 
}

  除此而外,stringstream类的对象我们还常用它进行string与各种内置类型数据之间的转换。

示例代码如下:

#i nclude <iostream> 
#i nclude <sstream> 
#i nclude <string> 
using namespace std;

int main()   

stringstream sstr; 
//--------int转string----------- 
int a=100; 
string str; 
sstr<<a; 
sstr>>str; 
cout<<str<<endl; 
//--------string转char[]-------- 
sstr.clear();//如果你想通过使用同一stringstream对象实现多种类型的转换,请注意在每一次转换之后都必须调用clear()成员函数。 
string name = "colinguan"; 
char cname[200]; 
sstr<<name; 
sstr>>cname; 
cout<<cname; 
system("pause"); 
}

增加一个例子:

// stringstream.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include <sstream>
#include <string>
using namespace std; int main()
{
stringstream sstr;
//--------int转string-----------
int a=100;
string str;
sstr<<a;
sstr>>str;
cout<<str<<endl; //--------string转char[]--------
sstr.clear();//如果你想通过使用同一stringstream对象实现多种类型的转换,请注意在每一次转换之后都必须调用clear()成员函数。
string name = "colinguan";
char cname[200];
sstr<<name;
sstr>>cname;
cout<<cname<<endl;//---string转int
sstr.clear();
int b = 0;
string s = "1";
sstr<<s;
sstr>>b;
cout<<b<<endl;system("pause");
}

输出:

转载于:https://www.cnblogs.com/KeenLeung/archive/2013/03/18/2966492.html

C++ :stringstream介绍,使用方法与例子(转)相关推荐

  1. java split 实现_PL/SQL实现JAVA中的split()方法的例子

    众所周知,java中为String类提供了split()字符串分割的方法,所以很容易将字符串以指定的符号分割为一个字符串数组.但是在pl/sql中并没有提供像java中的split()方法,所以要想在 ...

  2. oracle Blob保存方式,关于文件保存到Oracle中BLOB字段的方法及例子

    关于文件保存到Oracle中BLOB字段的方法及例子 ------------------------------------------- public class FileOpClass { pu ...

  3. 分解为具有无损连接性和依赖保持性的3NF的方法以及例子

    分解为具有无损连接性和依赖保持性的3NF的方法以及例子 通用方法 例子 通用方法 输入:关系模式R<U, F> 输出:具有无损连接性和函数依赖保持性的3NF分解ρ = {R1, R2, - ...

  4. 腾讯语音识别 php接口,TP6引入腾讯云SDK,并使用其方法,语音识别例子

    通过composer安装SDK composer官网包查询的地址 : 传送门 特别说明 : 通过composer引入之后,在文件内直接使用 // 测试腾讯语音识别 Route::rule(" ...

  5. 组播ip mac转换 c语言,组播IP地址与组播MAC地址之间的换算方法与例子

    组播IP地址与组播MAC地址之间的换算方法与例子 1个oui 有2 的24方个MAC地址 组播地址 :2的28次方,224.0.0.0-239.255.255.255 可用组播范围:0100.5E00 ...

  6. ABB机器人安全板硬件功能介绍+接线方法示例

    ABB机器人安全板硬件功能介绍+接线方法示例 ABB机器人有以下几种硬件停止功能,这些均属于EN 13849-1中描述的安全类别3,该安全类别是双通道发起的停止,如果发生单通道故障(例如接线不良),则 ...

  7. C++ stringstream介绍,使用方法与例子

    C++引入了ostringstream.istringstream.stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件. istringstream类用于执行C++ ...

  8. C# String部分方法的例子StringBuilder的简单介绍

    最近做力扣最常用的string的几种方法,在此做个小笔记: Replace 举个栗子:把字符串 s 中的每个空格替换成"%20". 输入:s = "We are happ ...

  9. 9个提高SEO文章的排名的写作方法和例子

    爱发猫认为在开始编写文本之前,请做好充分的准备. 良好的准备对于顺利写出更高质量的文章至关重要. 有两点需要考虑. 准备写作 成为人物 考虑搜索意图 将构图视为一个角色 爱发猫认为写作时,你是否有一个 ...

最新文章

  1. 用神经网络构造一个基于分类的多体系统
  2. linux mysql 单机主从_MariaDB单机双实例主从复制
  3. java hprof_java 性能之 hprof
  4. JavaOne演讲者选择了您不应该错过的10个会话
  5. java 同步块的锁是什么,java – 同步块 – 锁定多个对象
  6. windows环境下32位汇编语言程序设计 90盘_程序设计作业题汇总
  7. Spring : 连接池-HikariCP
  8. springcloud---how2java--记录零碎的信息
  9. C# 之 Win32 Api使用
  10. AI为传统零售行业赋能,自助收银推动无人零售发展
  11. oracle数据库:恢复delete的数据
  12. ios系统获取udid
  13. api—淘宝图片上传
  14. 使用CSS完成用户注册页面;
  15. windows service.bat java 内存设置_Tomcat加大内存设置从windows服务启动不生效的问题...
  16. win10 1809无法更新(扩展EFI分区)
  17. VirtualBox 启动错误
  18. 【前端面试题】01—42道常见的HTML5面试题(附答案)
  19. java.sql.SQLException: HOUR_OF_DAY: 2 -> 3
  20. JAVA项目:后台管理页面——显示数据库中所有信息+删除和编辑(MySQL)

热门文章

  1. elm的 java包_README.md
  2. 萌新的Python练习菜鸟100例(十二)判断101-200之间有多少个素数,并输出所有素数
  3. 课节3: 图游走类模型1-deepwalk与node2vec
  4. java系列2:方法的重载
  5. 古根海姆CIO Scott Minerd:加密货币为 “郁金香狂热“
  6. Dogeswap上线18小时TVL突破300万美金
  7. One River CEO:从长远来看比特币可能达到每枚50万美元
  8. 基于以太坊的去中心化存储协议Swarm计划在2季度发布1.0版
  9. 港股区块链概念股走强,火币科技涨超17%
  10. 数据切片和切块 钻取 旋转