type
status
date
slug
summary
tags
category
icon
password
Property
string
类型在共同的顺序容器操作之外还提供了很多额外的操作。其中的大部分操作要么是提供 sting
与 C 风格字符数组之间的交互,要么是提供使用索引而不是迭代器来操作string
。string
库提供了大量的函数,幸运的是,这些函数有着重复的模式。构造string的其他方法
构造
string
的其他方法:这些构造函数接受一个
string
或const char*
为参数,还可以接受一个额外的可选参数来指定需要拷贝的字符。当传入string
时,还需要指定开始拷贝的字符的索引,如:通常如果从
const char*
创建一个string
,指针指向的字符数组必须是空字符结尾的,拷贝操作遇到空字符结束。如果同时传入计数值,数组就不必必须以空字符结尾。如果没有传入count
而数组没有以空字符结尾,或者给了count
但是其值大于数组的长度,那么操作将是未定义的。从
string
拷贝时,可以提供额外的参数来指定开始拷贝的位置,以及一个计数值。开始位置必须小于等于给定string
的长度。如果起点大于长度,那么构造函数将抛出out_of_range
异常。当传入计数值,将从给定位置拷贝计数值个字符,不管计数值是多少,只会最多拷贝到string
的结尾处,不可能更多字符。substr操作
substr
返回原始 string 的一部分或全部的拷贝string
,可以给substr
传入可选的起点和计数器:如果传递给
substr
函数的开始位置超过string
的大小,则函数会抛出out_of_range
异常。改变string的其他方法
修改
string
的操作:string
类型支持顺序容器的赋值运算符以及assign
、insert
和erase
操作。除此之外,它还定义了额外的insert
和erase
版本。除了接受迭代器的
insert
和erase
版本外,string
还提供了接受下标的版本。下标指出了开始删除的位置,或是insert
到给定值之前的位置:标准库
string
类型还提供了接受C
风格字符数组的insert
和assign
。例如可以将以空字符结尾的字符数组insert
到或assign
给一个string
:也可以指定来自其他
string
或子字符串的字符插入到当前string
中或赋予当前string
:append和replace函数
append
函数是在 string
末尾进行插入操作的简写形式。replace
函数是调用 erase
和 insert
函数的简写形式:改变 string 的多种重载方式
append
assign
, insert
和replace
函数有多个重载版本。这个参数随着指定添加字符和改变string
的哪个部分的不同方式而改变。replace
函数提供两种方式来指定要移除的字符范围。可以通过指定位置和长度来表示范围,或者通过迭代器范围。insert
函数提供了两种方式来指定插入点:用索引或者迭代器。在两种方式中都是新元素都被插入到给定索引或者迭代器之前。有多种方式来指定添加到
string
中的字符。新的字符可以来自于另外一个 string
,来自于字符指针或者来自于花括号中的字符列表,或者一个字符加计数器。当字符来自于 string
或字符指针时,可以传递额外的参数来告知是拷贝参数中的部分还是全部字符。string搜索操作
string
的每个搜索操作都返回一个 string::size_type
值,表示匹配位置的下标。如果搜索失败,则返回一个名为 string::npos
的 static
成员。标准库将 npos
定义为 const string::size_type
类型,并初始化为-1。不建议用
int
或其他带符号类型来保存 string
搜索函数的返回值。string
搜索操作: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
函数的几种参数形式:数值转换
C++11
增加了 string
和数值之间的转换函数:进行数值转换时,
string
参数的第一个非空白字符必须是符号(+
或 -
)或数字。它可以以 0x
或 0X
开头来表示十六进制数。对于转换目标是浮点值的函数,string
参数也可以以小数点开头,并可以包含 e
或 E
来表示指数部分。如果给定的
string
不能转换为一个数值,则转换函数会抛出invalid_argument
异常。如果转换得到的数值无法用任何类型表示,则抛出out_of_range
异常。