- 内容提要
- 前言
- 第 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 复习题答案
F.7 字符串修改方法
string 类提供了多个用于修改字符串的方法,其中绝大多数都拥有大量的重载版本,因此可用于 string 对象、字符串数组、单个字符和迭代器区间。
F.7.1 用于追加和相加的方法
可以使用重载的+ =运算符或 append( ) 方法将一个字符串追加到另一个字符串的后面。如果得到的字符串长于最大字符串长度,将引发 length_error 异常。+=运算符使得能够将 string 对象、字符串数组或单个字符追加到 string 对象的后面:
append( ) 方法也使得能够将 string 对象、字符串数组或单个字符追加到 string 对象的后面。此外,通过指定初始位置和追加的字符数,或者通过指定区间,还可以追加 string 对象的一部分。通过指定要使用字符串中的多少个字符,可以追加字符串的一部分。追加字符的版本使得能够指定要复制该字符的多少个实例。下面是各种 append( ) 方法的原型:
下面是几个示例:
operator+( ) 函数被重载,以便能够拼接字符串。该重载函数不修改字符串,而是创建一个新的字符串,该字符串是通过将第二个字符串追加到第一个字符串后面得到的。加法函数不是成员函数,它们使得能够将 string 对象和 string 对象、string 对象和字符串数组、字符串数组和 string 对象、string 对象和字符以及字符和 string 对象相加。下面是一些例子:
F.7.2 其他赋值方法
除了基本的赋值运算符外,string 类还提供了 assign( ) 方法,该方法使得能够将整个字符串、字符串的一部分或由相同字符组成的字符序列赋给 string 对象。下面是各种 assign( ) 方法的原型:
下面是几个例子:
接受右值引用作为参数的 assign( ) 方法是 C++11 新增的,它支持移动语义;另一个新增的 assign( ) 方法让您能够将 initializer_list 赋给 string 对象。
F.7.3 插入方法
insert( ) 方法使得能够将 string 对象、字符串数组或几个字符插入到 string 对象中。这个方法与 append( ) 方法相似,但它还接受另一个指定插入位置的参数,该参数可以是位置,也可以是迭代器。数据将被插入到插入点的前面。有几种方法返回一个指向得到的字符串的引用。如果 pos1 超过了目标字符串结尾,或者 pos2 超过了要插入的字符串结尾,该方法将引发 out_of_range 异常。如果得到的字符串长于最大长度,该方法将引发 length_error 异常。下面是各种 insert( ) 方法的原型:
例如,下面的代码将字符串“former”字符串插入到“The banker.”中 b 的前面:
而下面的代码将字符串“ waltzed”(不包括!,它是第 9 个字符)插入到“The former banker.”末尾的句号之前:
F.7.4 清除方法
erase( ) 方法从字符串中删除字符,其原型如下:
第一种格式将从 pos 位置开始,删除 n 个字符或删除到字符串尾。第二种格式删除迭代器位置引用的字符,并返回指向下一个元素的迭代器;如果后面没有其他元素,则返回 end( )。第三种格式删除区间[first,last)中的字符,即从 first(包括)到 last(不包括)之间的字符;它返回最后一个迭代器,该迭代器指向最后一个被删除的元素后面的一个元素。最后,方法 pop_back( ) 删除字符串中的最后一个字符。
F.7.5 替换方法
各种 replace( ) 方法都指定了要替换的字符串部分和用于替换的内容。可以使用初始位置和字符数目或迭代器区间来指定要替换的部分。替换内容可以是 string 对象、字符串数组,也可以是特定字符的多个实例。对于用于替换的 string 对象和数组,可以通过指定特定部分(使用位置和计数或只使用计数)或迭代器区间做进一步的修改。下面是各种 replace( ) 方法的原型:
下面是一个例子:
注意,您可以使用 find( ) 来找出要在 replace( ) 中使用的位置:
上述代码将 old 替换为 mature。
F.7.6 其他修改方法:copy( ) 和 swap( )
copy( ) 方法将 string 对象或其中的一部分复制到指定的字符串数组中:
其中,s 指向目标数组,n 是要复制的字符数,pos 指出从 string 对象的什么位置开始复制。复制将一直进行下去,直到复制了 n 个字符或到达 string 对象的最后一个字符。函数返回复制的字符数,该方法不追加空值字符,同时由程序员负责检查数组的长度是否足够存储复制的内容。
警告:copy( ) 方法不追加空值字符,也不检查目标数组的长度是否足够。
swap( ) 方法使用一个时间恒定的算法来交换两个 string 对象的内容:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论