IO类

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

(1)基于控制台的I/O

(2)基于文件的I/O

(3)基于字符串的I/O

istringstream类

描述:从流中提取数据,支持 >> 操作

这里字符串可以包括多个单词,单词之间使用空格分开

 #include <iostream>
 #include <sstream>
 using namespace std;
 int main()
 {
     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 << n << endl;
     cout << d << endl;
     d = ;
     n = ;

     //假设换下存储类型
     istr >> d;//istringstream第一个数要自动变成浮点型,输出仍为1
     istr >> n;//istringstream第二个数要自动变成整型,有数字的阶段,输出为56   

     //测试输出
     cout << d << endl;
     cout << n << endl;
     system("pause");
     ;
 }

输出结果:

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

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

输出结果:

ostringstream类

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

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

 int main()
 {
     ostringstream ostr1; // 构造方式1
     ostringstream ostr2("abc");    // 构造方式2

     /*----------------------------------------------------------------------------
      *** 方法str()将缓冲区的内容复制到一个string对象中,并返回
     ----------------------------------------------------------------------------*/
     ostr1 <<  << endl;    // 格式化,此处endl也将格式化进ostr1中
     cout << ostr1.str();

     /*----------------------------------------------------------------------------
     *** 建议:在用put()方法时,先查看当前put pointer的值,防止误写
     ----------------------------------------------------------------------------*/
     long curPos = ostr2.tellp(); //返回当前插入的索引位置(即put pointer的值),从0开始
     cout << "curPos = " << curPos << endl;

     ostr2.seekp();    // 手动设置put pointer的值
     ostr2.put('g');    // 在put pointer的位置上写入'g',并将put pointer指向下一个字符位置
     cout << ostr2.str() << endl;

     /*----------------------------------------------------------------------------
     *** 重复使用同一个ostringstream对象时,建议:
     *** 1:调用clear()清除当前错误控制状态,其原型为 void clear (iostate state=goodbit);
     *** 2:调用str("")将缓冲区清零,清除脏数据
     ----------------------------------------------------------------------------*/
     ostr2.clear();
     ostr2.str("");

     cout << ostr2.str() << endl;
     ostr2.str("_def");
     cout << ostr2.str() << endl;
     ostr2 << "gggghh";    // 覆盖原有的数据,并自动增加缓冲区
     cout << ostr2.str() << endl;
 }

输出结果:

参考资料

【C++ Primer | 08】IO库的更多相关文章

  1. 08 IO库

    #include<iostream> #include<vector> #include<string> #include<fstream> using ...

  2. C++ Primer 读书笔记: 第8章 标准IO库

    第8章 标准IO库 8.1 面向对象的标准库 1. IO类型在三个独立的头文件中定义:iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,而sstream所定义的类型则用于 ...

  3. c++ primer 学习杂记3【标准IO库】

    第8章 标准IO库 发现书中一个错误,中文版p248 流状态的查询和控制,举了一个代码例子: int ival; // read cin and test only for EOF; loop is ...

  4. 《C++ Primer》笔记 第8章 IO库

    iostream定义了用于读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型. 标准库使我们能忽略这些不同类型的流之间的差异,这是通过继承机制 ...

  5. 【转载】C++ IO库

    本篇随笔为转载,原贴地址:<C++ Primer>第8章 IO库 学习笔记. 1.IO类 #include <iostream> istream//从流中读取数据 ostrea ...

  6. 第 8 章 IO库

    第 8 章 IO库 标签: C++Primer 学习记录 IO库 第 8 章 IO库 8.1 IO类 8.2 文件输入输出 8.1 string流 8.1 IO类 IO对象无拷贝或赋值,因此不能将形参 ...

  7. c++标准之IO库

    1.面向对象的标准库 2.多种IO标准库工具 istream,提供输入操作 ostream,提供输出操作 cin:读入标准输入的istream对象.全局对象extern std::istream ci ...

  8. [APUE]标准IO库(下)

    一.标准IO的效率 对比以下四个程序的用户CPU.系统CPU与时钟时间对比 程序1:系统IO 程序2:标准IO getc版本 程序3:标准IO fgets版本 结果: [注:该表截取自APUE,上表中 ...

  9. [APUE]标准IO库(上)

    一.流和FILE对象 系统IO都是针对文件描述符,当打开一个文件时,即返回一个文件描述符,然后用该文件描述符来进行下面的操作,而对于标准IO库,它们的操作则是围绕流(stream)进行的. 当打开一个 ...

  10. 文件IO函数和标准IO库的区别

    摘自 http://blog.chinaunix.net/uid-26565142-id-3051729.html 1,文件IO函数,在Unix中,有如下5个:open,read,write,lsee ...

随机推荐

  1. 20165231 预备作业二:学习基础和C语言基础调查

    微信文章感想 读了娄老师微信公众号中的文章,老师给我们的启示首先就是要坚持,万事开头难,但是只要肯坚持就一定会有所成就,不管是学习还是生活方面.其中最有触动的就是减肥了,是我三四年来一直难以完成的目标 ...

  2. Java9 新特性

    Java9中的9个新特性 1. Java 平台级模块系统 2. Linking 3. JShell: 交互式 Java REPL 4. 改进的 Javadoc 5. 集合工厂方法 6. 改进的 Str ...

  3. python3+selenium入门04-元素定位

    我们在对浏览界面做操作时,比如点击按钮,搜索框输入内容.都需要把鼠标挪过去,然后再点击,或者输入内容.在selenium操作时也是一样的.需要先对元素进行定位,然后才能进行操作.可以借助浏览器的开发者 ...

  4. salt使用技巧

    实时截获任务输出   __salt__['event.send']("module_send_event", {'message': message, 'jid': jid},   ...

  5. a.py

    #!/usr/bin/python # -*- coding: UTF-8 -*- import os import sys import re import shutil import glob d ...

  6. 题解-bzoj1283序列 & bzoj4842 [Neerc2016]Delight for a Cat

    因为这两题有递进关系,所以放一起写 Problem bzoj1283 序列 题意概要:一个长度为 \(n\) 的序列\(\{c_i\}\),求一个子集,使得原序列中任意长度为 \(m\) 的子串中被选 ...

  7. GNU Wget 1.19.1 static built on mingw32

    http://pan.baidu.com/s/1sluFAVj #wget --version GNU Wget 1.19.1 built on mingw32. -cares +digest -gp ...

  8. zabbix在运维方面的监控方法小结

    一些经典的运维问题: .配置文件中有空格,导致服务端下发的域名出现问题 .修改数据库没有备份 .修改dnspod问题,指向了错误的IP地址 .时间不一致,需要重新设定时区 .启动程序必须是最新版本,如 ...

  9. Docker从0开始之部署一套2048小游戏

    本文记录一下在docker部署一套2048小游戏的过程,在娱乐中熟悉docker的应用部署.docker 安装不在本文讲述之中,参考我的其它博客. 1.获取image镜像. 方法一:daocloud. ...

  10. JS实现多语言方式

    应用场景: 在不同移动平台(IOS,Android)上,建立一套与HTML页面通讯框架:主要业务逻辑使用HTML开发:想支持多语言开发. 动机: 通过主动发消息的方式,在页面完成初始化前,获取当前语言 ...