顺序容器--额外的string操作
除了顺序容器共同的操作之外,string类型还提供了一些额外的操作。这些操作中大致可以分为两部分:
1. 提供string类和C风格字符出租之间的相互转换;
2. 增加了允许我们用下标代替迭代器的版本。
构造string的其他方法
n,len2和pos2都是无符号值 | |
string s(cp,n) | s是cp 指向的数组中前n 个字符的拷贝。此数组至少应该包含n个字符 |
string s(s2,pos2) | s是string s2 从下标pos2 开始的字符的拷贝。若pos2>s2.size(),构造函数的行为未定义。 |
string s(s2,pos2,len2) |
s是string s2 从下标pos2 开始len2 个字符的拷贝。若pos2 > s2.size(),构造函数的行为未定义。不管len2 的值是多少, 构造函数至多拷贝s2.size()-pos2个字符。 |
这些构造函数接受一个string 或一个const char* 参数,还接受(可选的)指定拷贝多少个字符的参数(pos2,len2)。
substr(pos,n) 操作
substr操作返回一个string,它是原始string的一部分货全部的拷贝。可以传递给substr 一个可选的开始位置和计数值:
string s("hello world");
//返回一个string,包含s 中从pos 开始的n 个字符的拷贝。pos的默认值为0。n的默认值为s,size()-pos, 即拷贝从pos开始的所有字符
string s1=s.substr(pos,n);
改变string的其他方法
修改string 的操作 | 常用场景 | |
s.assign(args) | 将s 中的字符替换为args 指定的字符。返回一个指向s 的引用 | 替换s 中的所有内容 |
s.append(args) | 将args 追加到s末尾。返回一个指向s 的引用。 | 将新字符追加到s 末尾 |
s.insert(pos,args) |
在pos 之前插入args 指定的字符。pos 可以使一个下标或一个迭代器。 接受下标的版本返回一个指向s 的引用;接受迭代器的版本返回指向第一个插入字符的迭代器。 |
在给定位置之前插入新字符 |
s.replace(range,args) |
删除s 中range 内的字符,替换为args 指定的字符。 range 或者是一个下标和一个长度,或者是一对指向s 的迭代器。返回一个指向s 的引用。 |
删除指定范围字符,并插入新字符 (新旧字符长度可以不一样长) |
新字符可以来自于:1. 另一个string;2. 一个字符指针(指向的字符数组);3. 一个花括号包围的字符列表。当字符来自于一个string 或一个字符指针时,我们可以传递一个额外的参数来控制是拷贝部分还是全部字符。例如,s.insert(0, s2, 0, s2.size()); //在s[0]之前插入s2 中s2[0] 开始的s2.size() 个字符。
并不是每个函数都支持所有形式的参数。例如,insert 就不支持下标和初始化列表参数。类似的,如果我们希望用迭代器指定插入点,就不能用字符指针指定新字符的来源。
string 搜索操作
string 类提供了6个不同的搜索函数,每个函数都有4个重载版本。每个搜索操作都返回一个string::size_type (无符号类型)值,表示匹配发生位置的下标。如果未找到,返回npos (初始化为-1)。
string 搜索操作 | |
s.find(args) | 查找s 中args 第一次出现的位置 |
s.rfind(args) | 查找s 中args 最后一次出现的位置 |
s.find_first_of(args) | 在s 中查找args 中任何一个字符第一次出现的位置 |
s.find_last_of(args) | 在s 中查找args 中任何一个字符最后一次出现的位置 |
s.find_first_not_of(args) | 在s 中查找第一个不在args 中的字符 |
s.find_last_not_of(args) | 在s 中查找最后一个不在args 中的字符 |
args 必须是以下形式之一 |
注意:第2个参数才表示位置,与前面改变string 的成员函数不一样 |
c, pos | 从s 中位置pos开始查找字符c. pos 默认为0 |
s2, pos |
从s 中位置pos 开始查找字符串s2。 pos默认为0 |
cp, pos |
从s 中位置pos 开始查找指针cp 指向的以空字符结尾的C 风格字符串。 pos 默认为0 |
cp, pos, n |
从s 中位置pos 开始查找指针cp 指向的数组的前n 个字符。 pos 和n 无默认值 |
compare函数
标准库string 类型提供了一组compare 函数,类似C 标准库的strcmp 函数,根据s 是等于、大于还是小于参数指定的字符串,s.compare(args) 返回0,正数或负数。
根据参数的不同,compare函数有6个重载版本。具体args 形式参见c++ primer P327,表9.15.
数值转换
新标准引入了多个函数,可以实现数值数据与标准库string之间的转换:
具体转换函数,参见c++primer P328,表9.16.
c++ --string操作