月满霜华 发表于 2017-11-12 23:23:18

stringstream

有谁知道C++里面的stringstream和文件的输入输出有啥区别啊?怎么使用?百度上说啥内存层的输入输出。。我靠什么鬼啊!!!大佬来拉菜鸟一把{:10_254:}

BngThea 发表于 2017-11-13 07:42:58

什么区别?两者本来就不是一样的。stream里面就包含了iostream和strstream

月满霜华 发表于 2017-11-14 01:37:48

BngThea 发表于 2017-11-13 07:42
什么区别?两者本来就不是一样的。stream里面就包含了iostream和strstream

stringstream这是C++里面的,iostream是C语言里面的

BngThea 发表于 2017-11-14 06:57:33

月满霜华 发表于 2017-11-14 01:37
stringstream这是C++里面的,iostream是C语言里面的

初学c++最常用的include指令是什么

月满霜华 发表于 2017-11-14 08:40:05

BngThea 发表于 2017-11-14 06:57
初学c++最常用的include指令是什么

stdio.h啊,不过stringstream是在sstream头文件里面

BngThea 发表于 2017-11-14 08:51:22

月满霜华 发表于 2017-11-14 08:40
stdio.h啊,不过stringstream是在sstream头文件里面

c++控制输入输出的不是<iostream>?
你确定你学的是C++?

U201010009 发表于 2017-11-14 09:43:38

BngThea 发表于 2017-11-14 08:51
c++控制输入输出的不是?
你确定你学的是C++?

大佬,您列个stream,stringstream,fstream的关系图出来吧,也学习下。

月满霜华 发表于 2017-11-14 09:54:30

BngThea 发表于 2017-11-14 08:51
c++控制输入输出的不是?
你确定你学的是C++?

我确定,iostream是输入输出没毛病,但stringstream更单纯,更安全,专用于字符流转换,以及输入输出,它是封装在sstream.h头文件里面的,默认为stringstream(string str){}他可以像C语言里面的istringstream那样从一个字符串中读取字符(调用put方法),也可以像ostringstream那样向一个字符串里插入字符(>>)

U201010009 发表于 2017-11-14 15:32:12

本帖最后由 U201010009 于 2017-11-14 15:43 编辑

C语言标准中没有stringstream.h的头文件(据我所知),是C++的头文件stringstream
Header: <sstream>
Namespace: std

根据VS的msdn帮助文档里查到的fstream和sstream的信息如下:

----------------------------------------------fstream------------------------------------------------------------------------------
fstream ---> typedef basic_fstream<char, char_traits<char> > fstream

basic_fstream --->
template <class Elem, class Tr = char_traits<Elem> >
    class basic_fstream : public basic_filebuf<Elem, Tr>
描述一个对象,它使用类basic_filebuf <Elem,Tr>的流缓冲区控制元素和编码对象的插入和提取,元素的类型为Elem,其特征由类Tr确定。

basic_filebuf --->
template <class Elem, class Tr = char_traits<Elem> >
    class basic_filebuf : public basic_streambuf<Elem, Tr>
描述了一个流缓冲区,它控制Elem类型的元素的传输,这些元素的特征由类Tr确定,与外部文件中存储的元素序列相交。



----------------------------------------------sstream-------------------------------------------------------------------------------

sstream
定义了几个模板类,它们支持存储在已分配数组对象中的序列的iostream操作,stringstream是其中之一。

stringstream ---> typedef basic_stringstream<char> stringstream

basic_stringstream --->
template <
   class Elem,
   class Tr = char_traits<Elem>,
   class Alloc = allocator<Elem>
>
   class basic_stringstream : public basic_stringbuf<Elem, Tr>
描述一个对象,它使用basic_stringbuf<Elem,Tr,Alloc>类的流缓冲区控制元素和编码对象的插入和提取。


basic_stringbuf --->
template <class Elem, class Tr = char_traits<Elem>,
   class Alloc = allocator<Elem>
>
   class basic_stringbuf : public basic_streambuf<Elem, Tr>
描述了一个流缓冲区,它控制Elem类型元素的传输,它的字符特征由类Tr确定,与数组对象中存储的一系列元素进行传输。



fstream和sstream的区别可以参考basic_filebuf和basic_stringbuf的区别。
使用方法可以在msdn上找到用例。
fstream用例(https://msdn.microsoft.com/zh-cn/library/a33ahe62.aspx)
sstream用例(http://www.usidcbbs.com/read-htm-tid-1898.html)(在msdn上暂未找到用例,所以在网上找的用例)
   

一去二悄悄 发表于 2017-11-14 20:47:03

推荐你看一下《C++Primer》,IO库那一节有很详细的讲解
页: [1]
查看完整版本: stringstream