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"); 

}

#include <sstream>
#include <string>
#include <iostream>
using namespace std; void main()
{
ostringstream ostr1; // 构造方式1
ostringstream ostr2("abc"); // 构造方式2 /*----------------------------------------------------------------------------
*** 方法str()将缓冲区的内容拷贝到一个string对象中,并返回
----------------------------------------------------------------------------*/
ostr1 << "ostr1" << 2012 << endl; // 格式化,此处endl也将格式化进ostr1中
cout << ostr1.str(); /*----------------------------------------------------------------------------
*** 建议:在用put()方法时,先查看当前put pointer的值,防止误写
----------------------------------------------------------------------------*/
long curPos = ostr2.tellp(); //返回当前插入的索引位置(即put pointer的值),从0開始
cout << "curPos = " << curPos << endl; ostr2.seekp(2); // 手动设置put pointer的值
ostr2.put('g'); // 在put pointer的位置上写入'g'。并将put pointer指向下一个字符位置
cout << ostr2.str() << endl; /*----------------------------------------------------------------------------
*** 反复使用同一个ostringstream对象时,建议:
*** 1:调用clear()清除当前错误控制状态,其原型为 void clear (iostate state=goodbit);
*** 2:调用str("")将缓冲区清零。清除脏数据
----------------------------------------------------------------------------*/
ostr2.clear();
ostr2.str(""); cout << ostr2.str() << endl;
ostr2.str("_def");
cout << ostr2.str() << endl;
ostr2 << "gggghh"; // 覆盖原有的数据。并自己主动添加缓冲区
cout << ostr2.str() << endl;
}

C++中stringstream ostringstream istringstream使用方式的更多相关文章

  1. 在WPF中使用依赖注入的方式创建视图

    在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...

  2. UWP中新加的数据绑定方式x:Bind分析总结

    UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...

  3. ASP.net 中手工调用WS(POST方式)

    ASP.net 中手工调用WS(POST方式)核心代码:string strUrl="http://localhost:21695/service1.asmx/getmythmod" ...

  4. Java中创建对象的几种方式

    Java中创建对象的五种方式: 作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字.使用Cl ...

  5. SQL Server中数据库文件的存放方式,文件和文件组

    原文地址:http://www.cnblogs.com/CareySon/archive/2011/12/26/2301597.html   SQL Server中数据库文件的存放方式,文件和文件组 ...

  6. Java中反射的三种常用方式

    Java中反射的三种常用方式 package com.xiaohao.test; public class Test{ public static void main(String[] args) t ...

  7. Asp.Net中的三种分页方式

    Asp.Net中的三种分页方式 通常分页有3种方法,分别是asp.net自带的数据显示空间如GridView等自带的分页,第三方分页控件如aspnetpager,存储过程分页等. 第一种:使用Grid ...

  8. C#中对于接口的实现方式

    转载: C#中对于接口的实现方式有隐式接口和显式接口两种: 隐式地实现接口成员创建一个接口,IChinese,包含一个成员 Speak;我们创建一个类Speaker,实现接口Chinese //隐藏式 ...

  9. 在js传递参数中含加号(+)的处理方式

    一般情况下,URL 中的参数应使用 url 编码规则,即把参数字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+).但是对于带有中文的参数来 ...

随机推荐

  1. 在自学css开始就遇到问题,“链入外部样式表”在多浏览器显示问题

    在自学css开始就遇到问题,“链入外部样式表”的习题,代码如下:A.被链入的CSS文件代码.css<style  type="text/css"><!--h1{b ...

  2. Linux系统的启动流程

    Linux系统的启动流程: 1.通电(通常按下电源键,开始通电) 2.加载BIOS (通常看到显示器提示按F2进入主板) 3.读取MBR (MBR硬盘的入口地址,用来装载引导) 4.进入引导 (通常有 ...

  3. Jmeter常用的逻辑控制器

    一.ForEach控制器 作用:ForEach Controlle一般和用户自定义变量(User Defined Variables)一起使用,其在用户自定义变量中读取一系列相关的变量.每一个线程下执 ...

  4. 关于iframe与$.load()哪个更好

    iframe与$.load()哪个更好       iframe可以直接加载页面,但是要付出降低搜索引擎搜索效率的代价,它引入静态文件的方式是完全独立的,简单意思就是,在页面一(父级页面)用ifram ...

  5. 00The C Programming Language

    The C Programming Language C语言是一门面向过程.抽象化的通用程序设计语言,广泛应用于底层开发.C语言能以简易的方式编译.处理低级存储器.C语言是仅产生少量的机器语言以及不需 ...

  6. 13Oracle Database 存储过程

    Oracle Database 存储过程 触发器相当于java中的事件监听,当某事件发生时激活特定的事件并执行相应的逻辑 DML触发器中包含了三种事件 insert update delete 语法格 ...

  7. HDU多校Round 8

    Solved:2 rank:141 D. Parentheses Matrix n,m有一个小于6的时候是一种构造方法 答案是n + (m - 2) / 2 (n > m) 都大于6的时候 可以 ...

  8. 右键快捷打开Git Bash here失败

    右键快捷打开Git Bash here失败,提示: Error: Could not fork child process: Resource temporarily unavailable (-1) ...

  9. Oracle 常用目录结构(10g)

    大多数情况下,了解Oracle常用目录结构,将大大提高数据库管理与维护的工作效率,本文介绍了Oracle 10g 的常用目录. OFA: 下面给出Oracle 最优灵活体系结构OFA(Optimal ...

  10. CCF201604-1 折点计数 java(100分)

    试题编号: 201604-1 试题名称: 折点计数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定n个整数表示一个商店连续n天的销售量.如果某天之前销售量在增长,而后一天 ...