文章目录

  • 1 C++的输入输出分为三种:
    • 1.1 基于控制台的I/O
    • 1.2 基于文件的I/O
    • 1.3 基于字符串的I/O
  • 2 头文件
  • 3 功能
  • 4 具体分析
    • 4.1 istringstream类
    • 4.2 ostringstream类
    • 4.3 stringstream类

1 C++的输入输出分为三种:

1.1 基于控制台的I/O

头文件 类型
iostream istream从中读取
ostream写到中去
iostream对进行读写,从istream和ostream派生

1.2 基于文件的I/O

头文件 类型
fstream ifstream从文件中读取,由istream派生
ofstream写到文件中去,由ostream派生
iostream对文件进行读写,从iostream派生

1.3 基于字符串的I/O

头文件 类型
sstream istringstream从string对象中读取,由istream派生
ostringstream写到string对象中去,由ostream派生
stringstream对string对象进行读写,从iostream派生

2 头文件

#include <sstream>

3 功能

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

4 具体分析

4.1 istringstream类

描述:从流中提取数据,支持 >> 操作
这里字符串可以包括多个单词,单词之间使用空格分开

istringstream的构造函数原形:
istringstream::istringstream(string str);

初始化:使用字符串进行初始化

istringstream istr("1 56.7");
istr.str("1 56.7");//把字符串"1 56.7"存入字符串流中

作用: 我们可以使用分解点获取不同的数据,完成 字符串其他类型 的转换

常用成员函数:

str():使istringstream对象返回一个string字符串

举例:把字符串类型的数据转换为其他类型

#include <iostream>
#include <sstream>
using namespace std;
int main(int argc,char* argv[])
{  istringstream istr("1 56.7");  cout<<istr.str()<<endl;//直接输出字符串的数据 "1 56.7"   string str = istr.str();//函数str()返回一个字符串   cout<<str<<endl;  int n;  double d;  以空格为界,把istringstream中数据取出,应进行类型转换   //istr>>n;//第一个数为整型数据,输出1   //istr>>d;//第二个数位浮点数,输出56.7   测试输出   //cout<<d<<endl;  //cout<<n<<endl; //假设换下存储类型   istr>>d;//istringstream第一个数要自动变成浮点型,输出仍为1   istr>>n;//istringstream第二个数要自动变成整型,有数字的阶段,输出为56   //测试输出   cout<<d<<endl;  cout<<n<<endl;  system("pause");  return 1;
}

运行结果:

举例2:把一行字符串放入流中,单词以空格隔开。之后把一个个单词从流中依次读取到字符串

#include <iostream>
#include <sstream>
using namespace std;
int main(int argc,char* argv[])
{  istringstream istr;  string line,str;  while (getline(cin,line))//从终端接收一行字符串,并放入字符串line中   {  istr.str(line);//把line中的字符串存入字符串流中   while(istr >> str)//每次读取一个单词(以空格为界),存入str中   {  cout<<str<<endl;  }  }  system("pause");  return 1;
}

运行结果:

4.2 ostringstream类

描述:把其他类型的数据写入流(往流中写入数据),支持<<操作

ostringstream的构造函数原形:
ostringstream::ostringstream(string str);

初始化:使用字符串进行初始化

ostringstream ostr("1234");
ostr.str("1234");//把字符串"1234"存入字符串流中

举例:

#include <iostream>
#include <sstream>
using namespace std;
int main()
{  //初始化输出字符串流ostr   ostringstream ostr("1234");  cout<<ostr.str()<<endl;//输出1234   ostr.put('5');//字符4顶替了1的位置   cout<<ostr.str()<<endl;//输出5234   ostr<<"67";//字符串67替代了23的位置,输出5674   string str = ostr.str();  cout<<str<<endl;  system("pause");  return 1;
}

运行结果:

4.3 stringstream类

描述:是对istringstream和ostringstream类的综合,支持<<, >>操作符,可以进行字符串到其它类型的快速转换

stringstream的构造函数原形如下:
stringstream::stringstream(string str);

初始化:使用字符串进行初始化

stringstream str("1234");
str.str("1234");//把字符串"1234"存入字符串流中

作用:
1、stringstream通常是用来做数据转换的
2、将文件的所有数据一次性读入内存

举例1:基本数据类型变字符串

/*基本数据类型变字符串*/
#include <fstream>
#include <iostream>
#include <sstream>
using namespace std;
int main()
{  /*整型变字符串*/  int n = 10;  string str;  stringstream stream;  stream << n;  stream >> str;  cout<<str<<endl;  stream.clear();//多次使用stringstream,要先清空下,不能使用stream.str("");否则下面输出10   /*char* 变 string*/  char cStr[10] = "china";  stream << cStr;  stream >> str;  cout<<str<<endl;  system("pause");  return 1;
}

运行结果:

举例2:字符串变基本数据类型

/*字符串变基本数据类型*/
#include <fstream>
#include <iostream>
#include <sstream>
using namespace std;
int main()
{  /*字符串 变 double*/  double n;  string str = "12.5";  stringstream stream;  stream << str;  stream >> n;  cout<<n<<endl;  stream.clear();//多次使用stringstream,要先清空下,不能使用stream.str("");   /*string 变 char* */  string str1 = "china";  char cStr[10];  stream << str1;  stream >> cStr;  cout<<cStr<<endl;//输出china   system("pause");  return 1;
}

运行结果:

注意:

#include <iostream>
#include <sstream>
using namespace std;  int main(int argc,char *argv[])
{  std::stringstream stream;  string str;  while(1)  {     //clear(),这个名字让很多人想当然地认为它会清除流的内容。   //实际上,它并不清空任何内容,它只是重置了流的状态标志而已!   stream.clear();    // 去掉下面这行注释,清空stringstream的缓冲,每次循环内存消耗将不再增加!   //stream.str("");         stream<<"sdfsdfdsfsadfsdafsdfsdgsdgsdgsadgdsgsdagasdgsdagsadgsdgsgdsagsadgs";  stream>>str;     //测试输出每次循环,你的内存消耗增加了多少!   cout<<"Size of stream = "<<stream.str().length()<<endl;  system("PAUSE");  }  system("PAUSE");  return EXIT_SUCCESS;
}

运行结果:

由于stringstream构造函数会特别消耗内存,似乎不打算主动释放内存(或许是为了提高效率),但如果你要在程序中用同一个流,反复读写大量的数据,将会造成大量的内存消耗,因些这时候,需要适时地清除一下缓冲 (用 stream.str(""))。

另外不要企图用 stream.str().resize(0),或 stream.str().clear()来清除缓冲,使用它们似乎可以让stringstream的内存消耗不要增长得那么快,但仍然不能达到清除stringstream缓冲的效果,内存的消耗还在缓慢的增长!,至于stream.flush(),则根本就起不到任何作用。


以上内容来自:

  1. 冷夜 - 网游编程技术_istringstream、ostringstream、stringstream 类介绍 .【CNBLOGS】

C++/C--istringstream、ostringstream、stringstream 类介绍【转载】相关推荐

  1. istringstream、ostringstream、stringstream 类介绍

    istringstream.ostringstream.stringstream 类介绍 c++的输入输出主要分为以下3种 标准流输入输出(基于控制I/O) 头文件:#include <iost ...

  2. istringstream ostringstream stringstream

    #include <iostream> #include <string> #include <sstream> using namespace std; int ...

  3. C++istringstream, ostringstream, stringstream的用法

    1.ostringstream:ostringstream 对象用来进行格式化的输出,可以方便的将各种类型转换为string类型.ostringstream 只支持 << 操作符. 2.i ...

  4. istringstream、ostringstream、stringstream 类介绍 .

    0.C++的输入输出分为三种: (1)基于控制台的I/O (2)基于文件的I/O (3)基于字符串的I/O 1.头文件 [cpp] view plaincopyprint? #include < ...

  5. C++编程语言中stringstream类介绍

    本文主要介绍 C++ 编程语言中 stringstream 类的相关知识,同时通过示例代码介绍 stringstream 类的使用方法. 1 概述 <sstream> 定义了三个类:ist ...

  6. C++ istringstream、ostringstream、stringstream类用法详解

    文章目录 0 概述 1 istringstream 2 ostringstream 3 stringstream 4 类型转换 5 reference 0 概述 C++引入了ostringstream ...

  7. C++中istringstream、ostringstream、stringstream详细介绍和使用

    C++中istringstream.ostringstream.stringstream介绍和使用 (1)基于控制台的I/O 注意:提取符">>"从流中提取数据时跳过输 ...

  8. C++ : ostringstream、istringstream、stringstream

    这篇博文写的很好,转载收藏,感谢原作者! C++引入了ostringstream.istringstream.stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件. ...

  9. C#中的Dictionary字典类介绍(转载)

    C#中的Dictionary字典类介绍 关键字:C# Dictionary 字典  作者:txw1958 原文:http://www.cnblogs.com/txw1958/archive/2012/ ...

最新文章

  1. 从α到μ:DeepMind棋盘游戏AI进化史
  2. Net设计模式实例之建造者模式(Builder Pattern)(2)
  3. c语言 坐标系转换 axistoradius,dynamo编程语言翻译.pdf
  4. s3-1 数据链路层概述
  5. 关于selenium的8种元素定位
  6. 简单的树形dp NOJ376 小强的Linux
  7. swift3 0 流控制
  8. 3D竞技比赛或成数字娱乐新里程碑
  9. assert 的理解
  10. TrueLaunchBar 4.2
  11. 【原创】无线破解Aircrack-ng套件详解--airmon-ng与airodump-ng
  12. 关于element plus 插件 e-table的用法
  13. 2017年各大电商平台双11回顾:值得借鉴和改进的运营手段
  14. 基于Qt上USBCAN模块的二次开发
  15. 力扣1226.哲学家进餐
  16. MsCOCO数据集标注详解
  17. ExecuteNonQuery()返回值注意点
  18. 20222948 2022-2023-2 《网络攻防实践》第4周作业
  19. 一个文档读懂计算机网络
  20. jar包配置开机自启

热门文章

  1. How to Install Snapd and Snap applications on CentOS 7
  2. 使用Docker Compose管理多个容器
  3. 使用Docker快速搭建FTP服务器
  4. Git教程--如何安装Git 如何高效地使用Git 合理使用Git分支
  5. DockOne技术分享:十个问题带你了解Windows Docker
  6. Flutter Plugin开发流程
  7. C语言 提取字符串中的所有整数
  8. 斐讯N1刷Armbian_5.62,无法自动获取到ip怎么办?
  9. TCP三次握手抓包观察实战篇
  10. java final char_java基本数据类型总结 类型转换 final关键字的用法