🍆额外的string操作
2022-5-20
| 2023-8-2
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property

 
string 类型在共同的顺序容器操作之外还提供了很多额外的操作。其中的大部分操作要么是提供 sting 与 C 风格字符数组之间的交互,要么是提供使用索引而不是迭代器来操作string
string 库提供了大量的函数,幸运的是,这些函数有着重复的模式。
 

构造string的其他方法

构造 string 的其他方法:
notion image
这些构造函数接受一个stringconst char*为参数,还可以接受一个额外的可选参数来指定需要拷贝的字符。当传入string时,还需要指定开始拷贝的字符的索引,如:
 
通常如果从const char*创建一个string,指针指向的字符数组必须是空字符结尾的,拷贝操作遇到空字符结束。如果同时传入计数值,数组就不必必须以空字符结尾。如果没有传入count而数组没有以空字符结尾,或者给了count但是其值大于数组的长度,那么操作将是未定义的。
string拷贝时,可以提供额外的参数来指定开始拷贝的位置,以及一个计数值。开始位置必须小于等于给定string的长度。如果起点大于长度,那么构造函数将抛出out_of_range异常。当传入计数值,将从给定位置拷贝计数值个字符,不管计数值是多少,只会最多拷贝到string的结尾处,不可能更多字符。
 

substr操作

substr 返回原始 string 的一部分或全部的拷贝string,可以给substr传入可选的起点和计数器:
notion image
如果传递给substr函数的开始位置超过string的大小,则函数会抛出out_of_range异常。
 
 

改变string的其他方法

修改string的操作:
notion image
notion image
 
string类型支持顺序容器的赋值运算符以及assigninserterase操作。除此之外,它还定义了额外的inserterase版本。
除了接受迭代器的inserterase版本外,string还提供了接受下标的版本。下标指出了开始删除的位置,或是insert到给定值之前的位置:
 
标准库string类型还提供了接受C风格字符数组的insertassign 。例如可以将以空字符结尾的字符数组insert到或assign给一个string
 
也可以指定来自其他string或子字符串的字符插入到当前string中或赋予当前string
 

append和replace函数

append 函数是在 string 末尾进行插入操作的简写形式。
 
replace 函数是调用 eraseinsert 函数的简写形式:
 

改变 string 的多种重载方式

append assign, insertreplace函数有多个重载版本。这个参数随着指定添加字符和改变string的哪个部分的不同方式而改变。
replace 函数提供两种方式来指定要移除的字符范围。可以通过指定位置和长度来表示范围,或者通过迭代器范围。insert 函数提供了两种方式来指定插入点:用索引或者迭代器。在两种方式中都是新元素都被插入到给定索引或者迭代器之前。
有多种方式来指定添加到 string 中的字符。新的字符可以来自于另外一个 string,来自于字符指针或者来自于花括号中的字符列表,或者一个字符加计数器。当字符来自于 string 或字符指针时,可以传递额外的参数来告知是拷贝参数中的部分还是全部字符。
 
 

string搜索操作

string 的每个搜索操作都返回一个 string::size_type 值,表示匹配位置的下标。如果搜索失败,则返回一个名为 string::nposstatic 成员。标准库将 npos 定义为 const string::size_type 类型,并初始化为-1。
不建议用 int 或其他带符号类型来保存 string 搜索函数的返回值。
 
string 搜索操作:
notion image
notion image
find函数是最简单的,它在string中搜索参数,然后返回第一个匹配的索引,如果没有找到就返回 npos
 
string 的搜索操作是大小敏感的:
 
一个稍微复杂的问题是在string中查找参数字符串中的任何一个字符,如以下查找 name 中的第一个数字:
 
与之相反,可以调用 find_first_not_of 来查找第一个不存在于搜索参数中的字符,如以下查找第一个非数字字符:
 

指定从哪里开始搜索

可以传递额外的起始位置给find操作,这个额外的参数告知从哪里开始搜索。默认的情况下开始搜索的位置是0。这个额外的参数常用于循环查找所有的匹配位置:
 

逆向搜索

find 操作是自左向右进行搜索的,库中还提供了类似的操作进行自右向左的搜索。rfind成员查找最后一个也就是最右边的匹配:
find_last_of 搜索参数中任一一个字符出现在 string 中的最后的位置;find_last_not_of 搜索不匹配搜索参数中任何字符的最后一个位置;
以上这些操作都有第二个参数用于表示在 string 中开始搜索的位置。
 
 

compare函数

string 类型提供了一组 compare 函数进行字符串比较操作,类似C标准库的 strcmp 函数。
compare 函数的几种参数形式:
notion image
 

数值转换

C++11增加了 string 和数值之间的转换函数:
notion image
进行数值转换时,string参数的第一个非空白字符必须是符号(+-)或数字。它可以以 0x0X 开头来表示十六进制数。对于转换目标是浮点值的函数,string参数也可以以小数点开头,并可以包含 eE 来表示指数部分。
如果给定的string不能转换为一个数值,则转换函数会抛出invalid_argument异常。如果转换得到的数值无法用任何类型表示,则抛出out_of_range异常。
 
  • C++
  • 顺序容器操作容器适配器
    目录