第7章 字符串, 流和正则表达

本章,我们将对字符串的处理进行介绍,其中包括处理、解析和打印任意的数据。对于这样的需求,STL提供了I/O流库进行支持。这些库由以下的类组成,对应的类使用灰色框表示:

第7章 字符串, 流和正则表达 - 图1

箭头的指向代表了每个类之间的继承关系。这里面类的数量还挺多,本章中,我们会逐个来熟悉。我们使用类型名称在STL的手册中进行查找时,不一定能直接找到这些类。因为图中的这些名字是对于应用开发者来说的,其中大多数类型的名称都是以basic_为前缀(例如:我们能很容易的在STL文档章找到basic_istream,而istream却很难找到)。以basic_为前缀的I/O流类型为模板类,可以将其特化成不同的字符类型。图中的类型都可以以char类型进行特化。我们将会在本书剩下的章节中,使用以char为特化的版本。当我们看到类型名前面以w开头时(例如:wistreamwostream),将使用wchar_t类型代替char类型。

图的最顶端,能看到std::ios_base类。我们不能直接对其进行使用,不过其他的类型都是其子类。其一种特化为std::ios,这个类型对象会包含流数据,其能通过good成员函数对流的状态进行查询,还能通过empty成员函数数据状态是否为(EOF)。

我们经常使用的特化类有两个:std::istreamstd::ostream。两个类型的前缀io代表着输入和输出。我们在之前的代码使用使用其std::coutstd::cin(还有std::cerr)对象对字符串进行过输入和输出。其都是这些类型的实例,也是非常通用的。我们通过ostream进行数据输出,使用istream进行数据输入。

iostream类则是对istreamostream的继承,其将输入和输出的能力进行合并。当我们要对流数据进行输入和输出的时候,我们就有三个类可供使用。

ifstreamofstreamfstream继承于istreamostreamiostream,不过为I/O流添加了文件的读入写出功能。

istringstream, ostringstreamiostringstream原理十分类似,会将字符串读入内存中,并在内存中对数据进行处理。