2010-4-2 wcdj
string 类型 ( 在某些方面,可将 string 类型视为字符容器 ) 提供与 vector 容器相同的操作, string 类型与 vector 容器不同的是,它不支持以栈方式操纵容器。 string 类型还支持其特有的容器操作。
l 构造 string 对象的方法
string 类不支持带有单个容器长度作为参数的构造函数。
string 所支持的构造函数 | |
(1) 不提供任何参数,则得到空的 string 对象 | string s1;// s1 is the empty string |
(2) 将新对象初始化为另一个 string 对象的副本 | string s1(“abcde”); string s2(s1);// s2==”abcde” |
(3) 用一对迭代器初始化 ( 注意:不包括右迭代器所指元素 ) | string s3(s2.begin, s2.begin()+s2.size()/2);// s3==”ab” |
(4) 使用一个计数器和一个字符初始化 | string s4(5, ‘a’);// s4==”aaaaa” |
string 类型还提供了 3 种其他的方式创建该类对象 | |
(5) 创建一个 string 对象,它被初始化为 cp 所指向数组的前 n 个元素的副本 | string s(cp, n); |
(6) 创建一个 string 对象,它被初始化为一个已存在的 string 对象 s2 中从下标 pos2 开始的字符的副本,如果 pos2>s2.size() ,则该操作未定义 | string s(s2, pos2); |
(7) 创建一个 string 对象,它被初始化为 s2 中从下标 pos2 开始的 len2 个字符的副本。如果 pos2>s2.size() ,则该操作未定义。注意,无论 len2 的值是多少,最多只能复制 s2.size()-pos2 个字符
| string s(s2, pos2, len2); |
注:上述, n 、 len2 和 pos2 都是 unsigned 值 |
l 修改 string 对象的方法
string 类型支持的许多容器操作在操作时都是以迭代器为基础,但是也同样提供以下标为基础的操作。
与容器共有的 string 操作 | |
s.insert(p, t) | 在迭代器 p 指向的元素之前插入一个值为 t 的新元素。返回指向新插入元素的迭代器 |
s.insert(p, n, t) | 在迭代器 p 指向的元素之前插入 n 个值为 t 的新元素。返回 void |
s.insert(p, b, e) | 在迭代器 p 指向的元素之前插入迭代器 b 和 e 标记范围内所有的元素。返回 void |
s.assign(b, e) | 用迭代器 b 和 e 标记范围内的元素替换 s 。对于 string 类型,该操作返回 s ;对于容器类型,则返回 void |
s.assign(n, t) | 用值为 t 的 n 个副本替换 s 。对于 string 类型,该操作返回 s ;对于容器类型,则返回 void |
s.erase(p) | 删除迭代器 p 指向的元素。返回一个迭代器,指向被删除元素后面的元素 |
s.erase(b, e) | 删除迭代器 b 和 e 标记范围内所有的元素。返回一个迭代器,指向被删除元素段后面的第一个元素 (e 所指的元素不被删除 ) |
string 类型特有的版本 | |
s.insert(pos, n, c) | 在下标 pos 的元素之前插入 n 个字符 c |
s.insert(pos, s2) | 在下标 pos 的元素之前插入 string 对象 s2 的副本 |
s.insert(pos, s2, pos2, len) | 在下标 pos 的元素之前插入 s2 中从下标 pos2 开始的 len 个字符 |
s.insert(pos, cp, len) | 在下标 pos 的元素之前插入 cp 所指向数组的前 len 个字符 |
s.insert(pos, cp) | 在下标 pos 的元素之前插入 cp 所指向的以空字符结束的字符串副本 |
s.assign(s2) | 用 s2 副本替换 s |
s.assign(s2, pos2, len) | 用 s2 中从下标 pos2 开始的 len 个字符副本替换 s |
s.assign(cp, len) | 用 cp 所指向数组的前 len 个字符副本替换 s |
s.assign(cp) | 用 cp 所指向的以空字符结束的字符串副本替换 s |
s.erase(pos, len) | 删除从下标 pos 开始的 len 个字符 |
注:除非特殊声明,上述所有操作都返回 s 的引用 |
l 只适用于 string 类型的操作
string 类型提供了容器类型不支持的其他几种操作。
(1) substr 函数,返回当前 string 对象的子串。
(2) append 和 replace 函数,用于修改 string 对象。
(3) 一系列 find 函数,用于查找 string 对象。
子串操作 | |
s.substr(pos, n) | 返回一个 string 类型的字符串,它包含 s 中从下标 pos 开始的 n 个字符 |
s.substr(pos) | 返回一个 string 类型的字符串,它包含从下标 pos 开始到 s 末尾的所有字符 |
s.substr() | 返回 s 的副本 |
string 类型提供了 6 个 append 重载函数版本和 10 个 replace 版本。
特有的修改 string 对象的操作 | |
s.append(args ) | 将 args 串接在 s 后面。返回 s 的引用 |
s.replace(pos, len, args ) | 删除 s 中从下标 pos 开始的 len 个字符,用 args 指定的字符替换之。返回 s 的引用 ( 注意:在这个版本中, args 不能为 b2, e2 ) |
s.replace(b, e, args ) | 删除迭代器 b 和 e 标记的范围内所有的字符,用 args 替换之。返回 s 的引用 ( 注意:在这个版本中, args 不能为 s2, pos2, len2 ) |
append 和 replace 操作的参数: args | |
s2 | string 类型的字符串 s2 |
s2, pos2, len2 | 字符串 s2 中从下标 pos2 开始的 len2 个字符 |
cp | 指针 cp 指向的以空字符结束的数组 |
cp, len2 | cp 指向的以空字符结束的数组中前 len2 个字符 |
n, c | 字符 c 的 n 个副本 |
b2, e2 | 迭代器 b2 和 e2 标记的范围内所有字符 |
l string 类型的查找操作
string 类型提供了 6 种查找函数,每种函数以不同形式的 find 命名。 ( 此部分内容在以前的文章中总结过 )
string Search Operations | |
s.find(args) | Find first occurrence of args in s. |
s.rfind(args) | Find last occurrence of args in s. |
s.find_first_of(args) | Find first occurrence of any character from args in s. |
s.find_last_of(args) | Find last occurrence of any character from args in s. |
s.find_first_not_of(args) | Find first character in s that is not in args. |
s.find_last_not_of(args) | Find last character in s that is not in args. |
Arguments to string find Operations | |
c, pos | Look for the character c starting at position pos in s.pos defaults to 0 . |
s2, pos | Look for the string s2 starting at position pos in s.pos default to 0 . |
cp, pos | Look for the C-style null-terminated string pointed to by the pointer cp. Start looking starting at position pos in s.pos defaults to 0 . |
cp, pos, n | Look for the first n characters in the array pointed to by the pointer cp. Start looking starting at position pos in s. No default for pos or n. |
l string 对象的比较
string 类型定义了所有关系操作符,即 ==, !=, <, <=, >, >= 运算。 string 对象采用字典顺序比较。除了关系操作符, string 类型还提供了一组 compare 操作,用于实现字典顺序的比较。 ( 这些操作的结果类似于 C 语言中的库函数 strcmp)
string 类型的 compare 操作 | |
s.compare(s2) | 比较 s 和 s2 |
s.compare(pos1, n1, s2) | 让 s 中从 pos1 下标位置开始的 n1 个字符与 s2 做比较 |
s.compare(pos1, n1, pos2, n2) | 让 s 中从 pos1 下标位置开始的 n1 个字符与 s2 中从 pos2 下标位置开始的 n2 个字符做比较 |
s.compare(cp) | 比较 s 和 cp 所指向的以空字符结束的字符串 |
s.compare(pos1, n1, cp) | 让 s 中从 pos1 下标位置开始的 n1 个字符与 cp 所指向的字符串做比较 |
s.compare(pos1, n1, cp, n2) | 让 s 中从 pos1 下标位置开始的 n1 个字符与 cp 所指向字符串的前 n2 个字符做比较 |
compare 函数的返回值 | |
正数 | s1 大于 args 所代表的 string 对象 |
负数 | s1 小于 args 所代表的 string 对象 |
0 | s1 等于 args 所代表的 string 对象 |