• 包含头文件 <sstream>       是一个(父)类

  • 有2个子类 → 分别用于做输入、输出流操作

c++流类体系就是一个继承体系(字符流对象)

  • istringstream类       做输入的字符流类    只能作input

  • ostringstream类      做输出的字符流类        只能作output

  • 做字符串处理一般需要可读可写的方式,用stringstream类的对象(中间类)即可

一般会把字符放入字符流对象中去,如何获取字符流对象中的数据?

  • string str()                             获取string

  • void str(const string& str)     重载版本 重新设置字符流对象的数据

作用单一:字符流对象一般用于做字符串处理

  • 字符串分割

  • 字符串转换问题

构造方式

stringstream不存在无参构造方式,不存在用 = 的构造方式

void teststringstream()
{//构建字符流对象,以及获取字符流对象中数据stringstream sso(string("ILoveyou"));    //直接构建一个字符串放进去cout << sso.str() << endl;//无参构造stringstream ssnull;         //把数据流进去            ssnull << "我爱你!";                     cout << ssnull.str() << endl;/*报错 不存在适当的构造函数stringstream ss = string("IMissyou");stringstream ss = "imissyou;"     */
}int main()
{teststringstream();
}
/*输出*/ILoveyou
我爱你!

打印流对象的数据

cout << sso.str() << endl; //对象调用成员函数的方式 直接.str()就可以读到流里面的数据

通过左移右移操作流动数据<--->把数据从字符流对象中流出来 或 把数据流到字符流对象中去

小知识: 上面是把数据流到字符流对象中去,怎么把数据从字符流对象中流出来?

void teststringstream()
{stringstream ssnull;    ssnull << "我爱你!";string  data;//直接用右移就把数据流出来ssnull >> data;         cout << data << endl;//数据流出来后,字符流对象中还有没有东西? 类似拷贝一份出来 数据还在  cout<<ssnull.str()<<endl;
}
int main()
{teststringstream();
}
/*输出*/我爱你!
我爱你!

怎么清除原来流对象中的数据?

void teststringstream()
{stringstream ssnull;    ssnull << "我爱你!";string  data;ssnull >> data;cout << data << endl;//通过string来设置 把它设置为空相当于清除了当然也可以设置为其他字符串ssnull.str("");cout<<ssnull.str()<<endl;
}
int main()
{teststringstream();
}
/*输出*/我爱你!

字符串与数字之间转换

把数字转为字符串

  • 先把整数、字符 流进去,再按字符串的方式流出来即可,从而达到把 数字|字符1234 转换为字符串"1234"的效果

void teststringstream()
{int num = 1234;char input[20] = "";         //准备一个空的字符串stringstream transs(input);  //做一个空的流对象transs << num;               //流入数据transs >> input;             //再流出来cout << input << endl;}
int main()
{teststringstream();
}
/*输出*/1234(直接把数字1234转换为字符串1234)

把字符串转为数字

  • 创建一个流对象,把要转换的字符串放进去,用字符流对象的方式流入变量中即可

void teststringstream()
{stringstream snum("12345");  //构建一个对象 传入参数(把要转换成数字的字符串放进去)int temp = 0;snum >> temp;                //把字符串流入整型变量temp中cout << temp << endl;        //输出
}
int main()
{teststringstream();
}
/*输出*/12345(把字符串12345转换为数字12345)

小知识:

对于流的控制,输入的数据是不是 整数或字符 要根据你的格式控制、接收变量的类型去判断 

输入字符串,要求做分割 把每个整数和,分割出来

void teststringstream()
{//分割stringstream sData("23,132,3443,54,54,65");    //构建一个流对象int numData[6];                                //6个整数char cData[5];                                 //5个逗号for (int i = 0; i < 6; i++){if (i == 5)                                //i等于5不能再读了 最后一次没有逗号sData >> numData[i];elsesData >> numData[i] >> cData[i];       //第一个数据是整数 第二个数据是字符','}for (int i = 0; i < 6; i++){cout << numData[i] << " ";}for (int i = 0; i < 5; i++){cout << cData[i] << " ";}
}
int main()
{teststringstream();
}/*输出*/23 132 3443 54 54 65 , , , , ,                     //整数和字符被分割出来了

多次对同一个流对象做数据转换操作一定要用clear做重置操作,把当前位置移到原来开始的位置,还原为初始位置

void teststringstream()
{//字符串与数字之间转换int num = 1234;char input[20] = "";stringstream transs(input);transs << num;transs >> input;cout << input << endl;//多次同一个流对象做数据转换操作一定要做clear操作transs.clear();   transs << num;transs >> input;cout << input << endl;
}
int main()
{teststringstream();
}
/*输出*/1234
//没有clear操作不会输出这一行
1234

小知识:流操作类似c语言的输入,c语言中根据格式控制字符去输入缓冲区中拿数据,字符流对象类似一个字符流的缓冲区,也会根据变量类型从字符流对象中去拿什么数据,拿的数据不对就会出现乱码

  • 键盘输入  从键盘到程序

  • 字符流     从对象到变量

int main()
{char str[20] = "";int num;//c语言根据格式控制字符去输入缓冲区去拿数据scanf_s("%d%s", &num, str,20);    //c++没有格式控制字符,需要根据变量类型决定去拿数据cout << num << " " << str << endl;
}
/*输入*/12 iloveyou/*输出*/12 iloveyou

c++ IO流---字符流相关推荐

  1. Java IO: 其他字符流(下)

    转载自   Java IO: 其他字符流(下) 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackRe ...

  2. java io字符流_Java IO流字符流简介及基本使用

    Java IO流字符流简介及常用字符流的基本使用 字符流分为输入字符流(Writer)和输出字符流(Reader),这两种字符流及其子类字符流都有自己专门的功能.在编码中我们常用的输出字符流有File ...

  3. 第十五章 IO流(转换流 字符流 字符缓冲流 打印流)

    Java基础15 第十五章 IO流(转换流 字符流 字符缓冲流 打印流) 15.1 字符编码和字符集 15.1.1 字符编码 15.1.2 字符集 15.1.3 String类getBytes()方法 ...

  4. Java字节缓冲流/字符流/IO流小结

    文章目录 字节缓冲流 字节缓冲流构造方法 字符流 为什么会出现字符流 编码表 字符串中的编码解码问题 字符流中的编码解码问题 字符流写数据的5种方式 字符流读数据的2种方式 字符缓冲流 字符缓冲流特有 ...

  5. java IO流---字符流

    为什么需要字符流? 由于字节流操作中文不是特别的方便,所以Java就提供字符流 字符流 = 字节流+编码表 用字节流复制文本文件时,文本文件也会有中文,但是没有问题,因为最终底层操作会自动进行字节拼接 ...

  6. IO流 字符流 字节流 缓冲流 文件的复制

    IO流 IO概述 IO流就是一个管道,是用来在设备之间传输数据 input:相对于内存/程序 往进走输入流 output:相对于内存/程序 往硬盘写入 分类 根据数据进出方式 1.输出流: FileW ...

  7. java IO(输入输出) 字符流

    //读取文件中的字符 package zhi_jie_liu;import java.io.*;public class Example08 {public static void main(Stri ...

  8. Java学习笔记之 IO包 字符流

    字符流:Writer/Reader(字符流) 通过子类FileWriter和FileReader实现父类实例化 package iotest; import java.io.File; import ...

  9. JAVA Io 流 字符流 编码表 编码和解码的方法

    字节流,用中文可能会出现乱码 计算机中存储的信息都是二进制表示的 按照某种规则将字符编程二进制 再存储到计算机中,成为编码 按照同样规则,在计算机中二进制数解析出来,成为解码 编码和解码的方式必须一致 ...

  10. Java笔记整理六(File类,递归,字节流IO,字符流IO,流中的异常处理,属性集Properties,缓冲流,转换流,序列化,打印流)

    1.File类 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 文件和目录路径名的抽象表示 java把文件和文件夹封装位为一个File类,我们可 ...

最新文章

  1. 转载:DIV+CSS有可能遇到的问题
  2. CentOS系统安装配置JDK
  3. Spark SQL之External DataSource外部数据源(二)源代码分析
  4. CSS扩展“less和”sass“
  5. 基于matlab的ldpc编码的构造,基于LDPC编码的GMSK调制与解调及matlab仿真实现(含录像)...
  6. 8年了,这几个时间API你用过吗?
  7. 简述数据在OSI参考模型中的流动过程及过程中数据的单位
  8. 苹果新iPad Pro代工订单或将推升富士康4月份营收
  9. 如不指定存储类型c语言,总结C语言的五种存储类型
  10. Kettle(Pentaho Data Integration) 下载安装使用介绍/功能汇总
  11. quick cocos2dx 组件使用要领
  12. STM32CubeMX学习笔记(26)——SDIO接口使用(读写SD卡)
  13. MySQL-Workbench数据库备份
  14. 误删微信聊天记录觉得手足无措?免费教你如何恢复
  15. kafka_2.11 简单使用
  16. 简单爬取红牛分公司基本数据part01
  17. 深度学习1:二分类问题
  18. 【台大郭彦甫】Matlab入门教程超详细学习笔记六:高阶绘图(附PPT链接)
  19. 《无极限之危情速递》观后感
  20. 个人常用VScode插件及其配置

热门文章

  1. 利用交叉观察者这个小宝贝儿,轻松实现懒加载、吸顶、触底
  2. 深入理解JVM看这篇就够了
  3. 2021热乎的字节跳动软件测试工程师面试题及答案分享
  4. 多线程卖火车票的问题
  5. Linux_SSH传输文件命令:scp
  6. python 火车票抢票
  7. Linux 设备——网络驱动
  8. 行星万象表白墙微信小程序、社交微信小程序,后台完整,支持多区域运营,扫码体验。
  9. npm ERR! code ELIFECYCLE报错解决
  10. 实现微信,头条等外链跳转支付宝app领取赏金红包