第18章 string类.ppt_第1页
第18章 string类.ppt_第2页
第18章 string类.ppt_第3页
第18章 string类.ppt_第4页
第18章 string类.ppt_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

第18章string类 字符串处理在程序中应用广泛 在第3章中介绍了C风格字符串的相关内容 C风格字符串是以 0 空字符 来结尾的字符数组 在使用时 程序员需要考虑字符数组大小的开辟 结尾空字符的处理 使用起来有诸多不便 实际上 C 提供了string类用于字符串的处理 string类定义在头文件string中 注意和第3章提到的头文件cstring区分 cstring中定义的是一些对C风格字符串的处理函数 本章对string类的使用方法进行讨论 18 1为什么要使用string类 本节的题目也可以说是string类比C风格字符串要好 之所以抛弃C风格字符串而选用C 标准程序库中的string类 是因为string和C风格字符串相比 不必担心内存是否足够 字符串长度 结尾的空白符等等 string作为一个类出现 其集成的成员操作函数功能强大 几乎能满足所有的需求 从另一个角度上说 完全可以把string当成是C 的内置数据类型 放在和int double等同等位置上 注 如无特别说明 本章中提及的字符串均是指string字符串 和流类库差不多 string类其实是basic string类模板关于char型的实例化 对应着wchar t类型还有wstring类 本章讨论string类的用法 wstring类的用法与此完全一致 和STL一样 basic string模板中同样定义了size type类 用来表示元素个数等与系统相关的无符号整型 此外 还有表示元素类型的value type 对string类而言 value type等价与char 但对wstring类来说 value type为wchar t 18 2声明一个字符串 string是字符串类 首先来看一下如何通过构造函数来声明一个字符串 string类的构造函数如所示 18 3字符串的输入输出 C风格字符串的输入方式大致有 cin getline 和 cin get 3种 对string字符串来说 除了重载了 实现输出外 string头文件还定义了getline函数用以输入string字符串 抛弃了 cin getline 和 cin get 两种输入方式 原因在于getline外部函数能自动调整目标string的大小 使其能恰好存储输入的字符 输入同样会自动调整string对象的大小 外部getline函数第一个参数必须为输入流对象 第二个参数是待输入的string对象 第3个参数是分界符 getline函数将输入流中的字符存储到string变量中 直到满足下列条件之一 到达文件尾 此时输入流的eofbit置位有效 遇到分界字符 默认为换行符 n 此时 分解符会从流中删除 但并不会存储到string对象中 读取的字符达到最大允许值 string类中的常量npos决定了string所能存储的最大字符数 一般都很大 不会对输入产生影响 另一个因素是可用内存数 因此 最大允许值便是从npos和可用内存字节数中选取较小的一个 输入流的failbit置位有效 18 4string类功能 在讨论了如何创建字符串 及对字符串进行输入输出之后 本节讨论string类的其他一些public成员函数 通过这些函数可以方便地对字符串进行赋值 清空 实现不同字符串间的比较 字符的插入 删除 追加 以及搜索与查找等 下面分别展开讨论 18 4 1string字符串和C风格字符串的转换 C风格字符串转换为string字符串相对来说比较简单 通过构造函数即可实现 但由于string字符串实际上是类对象 其并不以空字符 0 结尾 因此 string字符串向C风格字符串的转化是通过3个成员函数完成的 分别为 constchar data 以字符数组的形式返回字符串内容 但末尾并不添加 0 constchar c str 返回一个以 0 结尾的字符数组intcopy char s size typen 字符串的内容复制或写入既有的C风格字符串或字符数组内 18 4 2赋值和清空 对string字符串的赋值有两种途径 一是使用操作符 二是使用成员函数assign 1 使用 等号右侧的操作数可以是string C风格字符串 还可以是单个字符 2 使用成员函数assign 成员函数assgin有多种重载形式 从本质上说 和有参构造函数的参数是相同的 参考 把字符串清空的方法有2个 以string字符串str为例 str 用空字符串为其赋值str erase 删除全部元素此外 erase函数还可用于删除部分元素 18 4 3元素删除 erase方法用于从字符串中删除字符 原型如下 1 iteratorerase iteratorFirst iteratorLast 删除 First Last 的字符 返回的迭代器指向最后一个被删除元素的后一个元素 2 iteratorerase iteratorIt 删除string中It所指的字符 返回指向下一个元素的迭代器 如果后面没有其他元素 则返回end 3 string删除string中从pos位置开始的n个字符或删除到末尾 返回删除后的string的引用 18 4 4元素追加与相加 提到追加与相加 首先想到的是重载的 操作符 操作符能将另一个string字符串 C风格字符串 甚至是单个字符添加到string字符串后 string类还定义了更灵活的append函数将另一个string字符串 C风格字符串 甚至是单个字符添加到string字符串后 此外 通过指定初始位置和追加字符数 以及指定区间的方法 可以将另一个string字符串或C风格字符串的一部分追加到是字符串中 append函数的各个重载版本定义如下 18 4 5元素插入 成员函数insert用于将string对象 字符数组或字符插入到string字符串中 这和追加append有些相似 只是元素插入不再局限于尾部 可以插入到中间 因此需要一个指示插入位置的参数 该参数可以是位置 也可以是迭代器 数据将被插入该位置的前面 insert函数的重载形式如下 1 string 18 4 6大小和容量 string类提供了一些和大小 容量相关的函数 如所示 18 4 7元素存取 可以使用下标操作符 和函数at 对字符串中包含的字符进行访问 需要注意的是操作符 并不检查索引是否有效 有效索引0 str length 如果索引失效 会引起未定义的行为 而at 会检查 如果使用at 的时候索引无效 会抛出out of range异常 特例 对const修饰的string常量str来说 操作符 对索引值str length 仍然有效 返回值是 0 其他情况下 即str不是const修饰的字符串常量 str length 索引都是无效的 18 4 8字符串比较 string字符串支持常见的比较操作符 0 大于 0 小于 来表示比较结果 18 4 9提取子串 string类提供了substr成员函数用于提取子串 以stringstr 12345678912345678 为例 str substr 返回str的全部内容str substr 9 从索引9后面的子串 即 12345678 str substr 5 6 从索引5开始 提取6个字符 即 678912 18 4 10搜索与查找 string类提供的搜索与查找函数很多 限于篇幅的原因 本章便不再铺开来讲 总体上说 string类提供了6种搜索函数 返回值均为size type 简要列举如下 1 find 系列 返回待查找元素或子串在字符串中第一次出现的位置 举例来说 字符串str为 WelcometoC World 使用find函数系列查找单个字符 o 在str中第一次出现位置 返回结果为4 还可查找子串 to 在str中的位置 返回结果为8 2 rfind 系列 返回待查找元素或子串在字符串中最后一次出现的位置 如使用rfind函数查找单个字符 o 在str中最后一次出现位置 返回结果为16 3 find first of 系列 返回待查找元素在字符串中第一次出现的位置 如果查找的子串 不是查找整个字符串的匹配 而是搜索子串中的字符首次出现的位置 同样以字符串 WelcometoC World 为例 使用find first of 系列函数查找字符串 abc 在其中首次出现的位置 返回结果为3 此时第一次出现了字符串 abc 中的元素 c 4 find last of 系列 返回待查找元素在字符串中最后一次出现的位置 如果查找的子串 不是查找整个字符串的匹配 而是搜索子串中的字符最后出现的位置 5 find first not of 系列 与find first of 的工作方式类似 不过搜索的是第一个不位于字符串中的字符第一次出现的位置 6 find last not of 系列 与find first of 的工作方式类似 不过搜索的是第一个不位于字符串中的字符最后一次所在位置 18 5小结 本章主要对C 标准库中提供的string字符串类进行了简要介绍 和普

温馨提示

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

评论

0/150

提交评论