22.6 - std-string 追加
Key Takeaway
追加字符串
在一个字符串的末尾追加字符串,可以使用 operator+=
或 append()
或 push_back()
。
string& string::operator+= (const string& str)
string& string::append (const string& str)
- 这些函数都可以将
str
追加到字符串的末尾; - 这些函数都返回
*this
以便可以被链式调用; - 如果结果超过最大字符个数则抛出
length_error
异常。
Sample code:
1 2 3 4 5 6 7 8 |
|
Output:
1 |
|
append()
函数也有几种,可以用于添加一个子串:
string& string::append (const string& str, size_type index, size_type num)
- 该函数将
str
中从索引index
开始的num
个字符串追加到字符串末尾; - 这些函数都返回
*this
以便可以被链式调用; - 如果索引越界,则抛出
out_of_range
; - 如果结果超过最大字符个数则抛出
length_error
异常。
例子:
1 2 3 4 5 |
|
输出:
1 |
|
Operator+=
和 append()
也提供了配合C语言风格字符串工作的版本:
string& string::operator+= (const char* str)
string& string::append (const char* str)
- 这些函数都可以将
str
追加到字符串的末尾; - 这些函数都返回
*this
以便可以被链式调用; - 如果结果超过最大字符个数则抛出
length_error
异常; str
不能是 NULL。
例子:
1 2 3 4 5 |
|
输出:
1 |
|
append()
还有另外一个配合C语言字符串工作的版本:
string& string::append (const char* str, size_type len)
- 将
str
的前len
个字符追加到字符串; - 这些函数都返回
*this
以便可以被链式调用; - 如果结果超过最大字符个数则抛出
length_error
异常; - 会忽略特殊字符(包括
”
)。
例子:
1 2 3 4 |
|
输出:
1 |
|
该函数不安全,不推荐使用。
还有另外一些可以追加字符的函数,注意,函数名是 push_back()
而不是 append()
!
string& string::operator+= (char c)
void string::push_back (char c)
- 这两个函数都可以将字符c追加到字符串;
operator +=
返回*this
以便可以被链式调用;- 如果结果超过最大字符个数则抛出
length_error
异常;
例子:
1 2 3 4 5 |
|
输出:
1 |
|
如果你好奇为什么这个函数的名字是 push_back()
而不是 append()
。这里是遵循了栈操作的命名习惯,push_back()
用于将一个单个内容添加到栈顶。如果我们将字符串看做是一个字符组成的栈,则使用 push_back()
将一个字符添加到栈顶是很符合直觉的。但是,没有提供 append()
函数在我看来在一致性方面是一种缺失!
append()
函数有一个版本可以添加多个字符串:
string& string::append (size_type num, char c)
- 将字符c重复
num
次追加到字符串中; - 返回
*this
以便可以被链式调用; - 如果结果超过最大字符个数则抛出
length_error
异常;
例子:
1 2 3 4 |
|
输出:
1 |
|
最后一种版本的 append()
可以配合迭代器工作:
string& string::append (InputIterator start, InputIterator end)
- 将
[start, end)
范围内的字符追加到字符串 (左闭右开区间); - 返回
*this
以便可以被链式调用; - 如果结果超过最大字符个数则抛出
length_error
异常;