- 内容提要
- 前言
- 第 1 章 预备知识
- 第 2 章 开始学习 C++
- 第 3 章 处理数据
- 第 4 章 复合类型
- 第 5 章 循环和关系表达式
- 第 6 章 分支语句和逻辑运算符
- 第 7 章 函数——C++的编程模块
- 第 8 章 函数探幽
- 第 9 章 内存模型和名称空间
- 第 10 章 对象和类
- 第 11 章 使用类
- 第 12 章 类和动态内存分配
- 第 13 章 类继承
- 第 14 章 C++中的代码重用
- 第 15 章 友元、异常和其他
- 第 16 章 string 类和标准模板库
- 第 17 章 输入、输出和文件
- 第 18 章 探讨 C++新标准
- 附录 A 计数系统
- 附录 B C++保留字
- 附录 C ASCII 字符集
- 附录 D 运算符优先级
- 附录 E 其他运算符
- 附录 F 模板类 string
- 附录 G 标准模板库方法和函数
- 附录 H 精选读物和网上资源
- 附录 I 转换为 ISO 标准 C++
- 附录 J 复习题答案
17.5 内核格式化
iostream 族(family)支持程序与终端之间的 I/O,而 fstream 族使用相同的接口提供程序和文件之间的 I/O。C++库还提供了 sstream 族,它们使用相同的接口提供程序和 string 对象之间的 I/O。也就是说,可以使用于 cout 的 ostream 方法将格式化信息写入到 string 对象中,并使用 istream 方法(如 getline( ))来读取 string 对象中的信息。读取 string 对象中的格式化信息或将格式化信息写入 string 对象中被称为内核格式化(incore formatting)。下面简要地介绍一下这些工具(string 的 sstream 族支持取代了 char 数组的 strstream.h 族支持)。
头文件 sstream 定义了一个从 ostream 类派生而来的 ostringstream 类(还有一个基于 wostream 的 wostringstream 类,这个类用于宽字符集)。如果创建了一个 ostringstream 对象,则可以将信息写入其中,它将存储这些信息。可以将可用于 cout 的方法用于 ostringstream 对象。也就是说,可以这样做:
格式化文本进入缓冲区,在需要的情况下,该对象将使用动态内存分配来增大缓冲区。ostringstream 类有一个名为 str( ) 的成员函数,该函数返回一个被初始化为缓冲区内容的字符串对象:
使用 str( ) 方法可以“冻结”该对象,这样便不能将信息写入该对象中。
程序清单 17.21 是一个有关内核格式化的简短示例。
程序清单 17.21 strout.cpp
下面是程序清单 17.21 中程序的运行情况:
istringstream 类允许使用 istream 方法族读取 istringstream 对象中的数据,istringstream 对象可以使用 string 对象进行初始化。
假设 facts 是一个 string 对象,则要创建与该字符串相关联的 istringstream 对象,可以这样做:
这样,便可以使用 istream 方法读取 instr 中的数据。例如,如果 instr 包含大量字符格式的整数,则可以这样读取它们:
程序清单 17.22 使用重载的>>运算符读取字符串中的内容,每次读取一个单词。
程序清单 17.22 strin.cpp
下面是程序清单 17.22 中程序的输出:
总之,istringstream 和 ostringstream 类使得能够使用 istream 和 ostream 类的方法来管理存储在字符串中的字符数据。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论