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 对象 |
本文详细介绍了 C++ 中 string 类型的构造方法、修改方法及独有的操作特性,包括子串提取、追加替换和查找等功能,并解释了 string 对象的比较规则。

被折叠的 条评论
为什么被折叠?



