字符串流sstream-part2

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

//验证字符串流不会主动释放内存
#include <iostream>
#include <sstream>
#include <iomanip>
using namespace std;
int main()
{
    ostringstream foo("hello world");
    cout<<foo.str()<<endl;        //hello world
    cout<<foo.str()<<endl;        //hello world

    istringstream bar("hello world");
    string word;
    while(bar>>word)
        cout<<word;               //helloworld
    cout<<endl;
    cout<<bar.str()<<endl;        //hello world

    stringstream ss;
    string str;
    while(1)
    {
        ss<<"abcdefg";
        ss>>str;
        cout<<"Size of stream = "<<ss.str().length()<<endl;        //7\n14\n21\n28...
        ss.clear();            //每次循环需要清除错误标识,因为ss>>str没有读取到数据时,会置位failbit,如果不清楚错误标识,将导致接下来的I/O无效
         system("pause");
    }
    system("pause");
    return 0;
}
//清除错误标识及清空string buffer
#include <iostream>
#include <sstream>
#include <iomanip>
using namespace std;
int main()
{
    stringstream ss("hello world");
    char ch;
    while(ss.get(ch))
        cout<<ch;                  //hello world
    cout<<endl;

    ss.clear();                    //清除ss.get()置位的failbit
    ss.str("");                    //清空string buffer
    ss<<"hello c++";
    cout<<ss.str()<<endl;

    system("pause");
    return 0;
}
时间: 2024-10-06 21:08:46

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

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;

【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

字符串流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.istrin

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