13.15C++对字符串流的读写_第1页
13.15C++对字符串流的读写_第2页
13.15C++对字符串流的读写_第3页
13.15C++对字符串流的读写_第4页
13.15C++对字符串流的读写_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文件流是以外存文件为输入输出对象的数据流 字符串流不是以外存文件为输入输出的对 象 而以内存中用户定义的字符数组 字符串 为输入输出的对象 即将数据输出到内存中 的字符数组 或者从字符数组 字符串 将数据读入 字符串流也称为内存流 字符串流也有相应的缓冲区 开始时流缓冲区是空的 如果向字符数组存入数据 随着向 流插入数据 流缓冲区中的数据不断增加 待缓冲区满了 或遇换行符 一起存入字符数 组 如果是从字符数组读数据 先将字符数组中的数据送到流缓冲区 然后从缓冲区中提 取数据赋给有关变量 在字符数组中可以存放字符 也可以存放整数 浮点数以及其他类型的数据 在向字符数 组存入数据之前 要先将数据从二进制形式转换为 ASCII 代码 然后存 放在缓冲区 再 从缓冲区送到字符数组 从字符数组读数据时 先将字符数组中的数据送到缓冲区 在赋 给变量前要先将 ASCII 代码转换为二进制形式 总之 流缓冲区中的 数据格式与字符数组 相同 这种情况与以标准设备 键盘和显示器 为对象的输入输出是类似的 键盘和显示 器都是按字符形式输入输出的设备 内存中的数据在输 出到显示器之前 先要转换为 ASCII 码形式 并送到输出缓冲区中 从键盘输入的数据以 ASCII 码形式输入到输入缓冲 区 在赋给变量前转换为相应变量类型的二进制形式 然后赋给变 量 对于字符串流的输 入输出的情况 如不清楚 可以从对标准设备的输入输出中得到启发 文件流类有 ifstream ofstream 和 fstream 而字符串流类有 istrstream ostrstream 和 strstream 文件 流类和字符串流类都是 ostream istream 和 iostream 类的派生类 因此 对它们的操作方法是基本相同的 向内存中的一个字符数组写数据就 如同向文件写数据一 样 但有 3 点不同 输出时数据不是流向外存文件 而是流向内存中的一个存储空间 输入时从内存中的存储空间读 取数据 在严格的意义上说 这不属于输入输出 称为读写比较合 适 因为输入输出一般指的是在计算 机内存与计算机外的文件 外部设备也视为文件 之间 的数据传送 但由于 C 的字符串流采用了 C 的流输入输出机制 因此往往也用输入和输出来表述读写操作 字符串流对象关联的不是文件 而是内存中的一个字符数组 因此不需要打开和关闭文件 每个文件的最后都有一个文件结束符 表示文件的结束 而字符串流所关联的字符数组中没有相 应的结束标志 用户要指定一个特殊字符作为结束符 在向字符数组写入全部数据后要写入此字符 字符串流类没有 open 成员函数 因此要在建立字符串流对象时通过给定参数来确立字符 串流与字符数组的关联 即通过调用构造函数来解决此问题 建立字符串流对象的方法与 含义如下 建立输出字符串流对象 ostrstream 类提供的构造函数的原型为 ostrstream ostrstream char buffer int n int mode ios out buffer 是指向字符数组首元素的指针 n 为指定的流缓冲区的大小 一般选与字符数组的 大小相同 也可以不同 第 3 个参数是可选的 默认为 ios out 方式 可以用以下语句 建立输出字符串流对象并与字符数组建立关联 ostrstream strout ch1 20 作用是建立输出字符串流对象 strout 并使 strout 与字符数组 ch1 关联 通过字符串流 将数据输出到字符数组 ch1 流缓冲区大小为 20 建立输入字符串流对象 istrstream 类提供了两个带参的构造函数 原型为 istrstream istrstream char buffer istrstream istrstream char buffer int n buffer 是指向字符数组首元素的指针 用它来初始化流对象 使流对象与字符数组建立关 联 可以用以下语句建立输入字符串流对象 istrstream strin ch2 作用是建立输入字符串流对象 strin 将字符数组 ch2 中的全部数据作为输入字符串流的 内容 istrstream strin ch2 20 流缓冲区大小为 20 因此只将字符数组 ch2 中的 20 个字符作为输入字符串流的内容 建立输入输出字符串流对象 strstream 类提供的构造函数的原型为 strstream strstream char buffer int n int mode 可以用以下语句建立输入输出字符串流对象 strstream strio ch3 sizeof ch3 ios in ios out 作用是建立输入输出字符串流对象 以字符数组 ch3 为输入输出对象 流缓冲区大小与数 组 ch3 相同 以上个字符串流类是在头文件 strstream 中定义的 因此程序中在用到 istrstream ostrstream 和 strstream 类时应包含头文件 strstream 在 GCC 中 用头文 件 strstream 例 13 17 将一组数据保存在字符数组中 include using namespace std struct student int num char name 20 float score int main student stud 3 1001 Li 78 1002 Wang 89 5 1004 Fun 90 char c 50 用户定义的字符数组 ostrstream strout c 30 建立输出字符串流 与数组 c 建立关联 缓冲区长 for int i 0 i 3 i 向字符数组 c 写个学生的数据 strout stud i num stud i name stud i score strout ends ends 是 C 的 I O 操作符 插入一个 0 cout array c c endl 显示字符数组 c 中的字符 运行时在显示器上的输出如下 array c 1001Li781002Wang89 51004Fun90 以上就是 字符数组 c 中的字符 可以看到 1 字符数组 c 中的数据全部是以 ASCII 代码形式存放 的字符 而不是以二进制形式表示的数据 2 在建立字符串流 strout 时指定流缓冲区大 小为 30 字节 与字符数组 c 的大小不同 这是允许的 这时字符串流最多可以传送 30 个 字符给字符数组 c 请思考 如果将流 缓冲区大小改为 10 字节 即 ostrstream strout c 10 运行情况会怎样 流缓冲区只能存放 10 个字符 将这 10 个字 符写到字符数组 c 中 运行时显示的结果是 1001Li7810 字符数组 c 中只有 10 个有 效字符 一般都把流缓冲区的大小指定与字符数组的大小 相同 3 字符数组 c 中的数据 之间没有空格 连成一片 这是由输出的方式决定的 如果以后想将这些数据读回赋给程 序中相应的变量 就会出现问题 因为无法分隔两个相邻的数据 为解决此问题 可在输 出时人为地加入空格 如 for int i 0 i 3 i strout stud i num stud i name stud i score 同时应修改流缓冲区的大小 以便能容纳全部内 容 今改为字节 这样 运行时将输出 1001 Li 78 1002 Wang 89 5 1004 Fun 90 再读入时就能清楚地将数据分隔开 例 13 18 在一个字符数组 c 中存放了个整数 以空 格相间隔 要求将它们放到整型数组中 再按大小排序 然后再存放回字符数组 c 中 include using namespace std int main char c 50 12 34 65 23 32 33 61 99 321 32 int a 10 i j t cout array c c endl 显示字符数组中的字符串 istrstream strin c sizeof c 建立输入串流对象 strin 并与字符数组 c 关联 for i 0 i a i 从字符数组 c 读入个整数赋给整型数组 a cout array a for i 0 i 10 i cout a i 显示整型数组 a 各元素 cout endl for i 0 i 9 i 用起泡法对数组 a 排序 for j 0 ja j 1 t a j a j a j 1 a j 1 t ostrstream strout c sizeof c 建立输出串流对象 strout 并与字符数组 c 关联 for i 0 i 10 i strout a i 将个整数存放在字符数组 c strout ends 加入 0 cout array c c endl 显示字符数组 c return 0 运行结果如下 array c 12 34 65 23 32 33 61 99 321 32 字符数组 c 原来的内容 array a 12 34 65 23 32 33 61 99 321 32 整型数组 a 的内容 array c 32 12 32 33 34 61 65 99 321 字符数组 c 最后的内容 对字符串流的几点说明 1 用字符串流 时不需要打开和关闭文件 2 通过字符串流从字符数组读数据就如同从键盘读数据一样 可以从字符数组读入字符数据 也可以读入整数 浮点数或其他类型数据 如果不用字符 串流 只能从字符数组逐个访问字符 而不能按其他类型的数据形式读取数据 这是用字 符串流访问字符数组的优点 使用方便灵活 3 程序中先后建立了两个字符串流 strin 和 strout 与字符数组 c 关联 strin 从字符数组 c 中获取数据 strout 将数据传送给字符 数组 分别 对同一字符数组进行操作 甚至可以对字符数组交叉进行读写 输入字符串流 和输出字符串流分别有流指针指示当前位 置 互不干扰 4 用输出字符串流向字符数组 c 写数据时 是从数组的首地址开始的 因此更新了 数组的内容 5 字符串流关联的字 符数组并不一定是专为字符串流而定义的数组 它与一般的字符数组无异 可以对该数组 进行其他各种操作 通过以上对字符串流的介绍 大

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论