字符串流sstream-part1

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;                          //将101送入foo的string buffer中,此时foo的string buffer中的内容为101t string
    bar<<101;                          //将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<<100<<" "<<200;
    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(2)<<fixed<<str<<num<<endl;        //此处endl也将被送入string buffer
    cout<<out.str();
    cout<<"format output complete.\n";

    system("pause");
    return 0;
}
时间: 2024-11-05 13:03:51

字符串流sstream-part1的相关文章

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

使用stringstream对象简化类型转换C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高级的一些功能,即单纯性.类型安全和可扩展性.在本文中,我将展示怎样使用这些库来实现安全和自动的类型转换. 为什么要学习 如果你已习惯了<stdio.h>风格的转换,也许你首先会问:为什么要花额外的精力来学习基于<sstream>的类型转换呢?也许对下面一个简单的例子的回顾能够说服你.假设你想用sprintf()函数将一个变量从int类型转

字符串流stringstream(头文件sstream)

今天看到一样很有趣的东西,可以用于各种类型的转换.其实一个文本可以看作一个长长的字符串,整数啊浮点数的都是字符串,于是在字符串流里面就可以很方便地玩转各种类型,比如说: 1 #include<iostream> 2 #include<sstream> 3 using namespace std; 4 5 int main() 6 { 7 double a,b; 8 istringstream is("12.3445 2.3"); 9 is>>a>

istringstream字符串流,实现类似字符串截取的功能,字符串流中的put,str()将流转换成为字符串string

 1. istringstream字符串流 #include <iostream> #include <sstream> #include <string> using namespace std; struct MyStruct { string str1, str2, str3; double db; int num; char ch; }; void main() { string  mystring("china  google microsoft

字符串流

字符串流包括istringstream ostringstream stringstream: 每一个流类都提供一个默认的缓冲区,当我们没有提供给缓冲区时,流类会自己构建一个缓冲区. 如同我们可以cout<<200,和cout<<"200"输出效果是一样的,同样,我们也可以将一个double输出给一个字符串流,也可以将一个字符串流输出给double. #include <iostream> #include <sstream> using

第八篇:使用字符串流对象进行格式转换

前言 字符串流对象有个很实用的功能就是格式转换.比如可以将整数类型的123转换成字符串格式的123,或者反过来.那么具体又是如何实现的?且看下文. 实现思路 对于整数转换成字符串格式,可设s是一个空的字符串流对象,” 整型变量 “存放目标整数.则当执行" s << 整型变量 "后,该整数将转成字符串格式并存进流中.随后代码中使用" s.str() "即可获取到该整数的字符串格式.对于字符串转换成整数格式,亦可设s是一个空的字符串流对象,” 整型变量 “存

c++的字符串流

 整型数据 #include <iostream> #include <string> #include <sstream> using namespace std; int main( ) { string s; int x; int sum; while (getline(cin, s)) { stringstream ss(s); sum=0; while (ss>>x) sum=sum+x; cout<<sum<<endl;

字符串流sstream-part2

stringstream构造函数会特别消耗内存,似乎不打算主动释放内存(或许是为了提高效率),如果你要在程序中使用同一个流反复读写大量数据,将会造成大量的内部消耗,因此建议:    1:调用clear()清除当前错误控制状态,其原型为 void clear (iostate state=goodbit);     2:调用str("")将缓冲区清零,清除脏数据 //验证字符串流不会主动释放内存 #include <iostream> #include <sstream

【C++】int转换为string的两种方法(to_string、字符串流)

本文转自http://blog.csdn.net/chavo0/article/details/51038397 记录一下用到过的int转换成string的两种方法 第一种是to_string函数,这是C++11新增的,使用非常方便,简单查了下:C++11标准增加了全局函数std::to_string,以及std::stoi/stol/stoll等等函数(这几个就是string转int,long,以及long long啦~) to_string这个函数还是很强大的! string to_stri

HDU 1062.Text Reverse【栈或数组或字符串流】【字符处理】【8月30】

Text Reverse Problem Description Ignatius likes to write words in reverse way. Given a single line of text which is written by Ignatius, you should reverse all the words and then output them. Input The input contains several test cases. The first lin