返回介绍

F.7 字符串修改方法

发布于 2024-10-08 23:14:17 字数 3864 浏览 0 评论 0 收藏 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文