c++ 字符串 -- string库
STL
C-strings 与string
c++ 中提供了两种字符串表示形式: C-strings 与string类。
- C-strings: 采用
\0
终止的一维字符数组。
- string类:标准库中提供的类
二者的区别在于 \0
在 string 类中并不具有特殊意义,但在C-string中用来标识字符串结束。
函数 |
说明 |
CharT* data(); |
以字符数组的形式返回string,是一个包含\0 字符的有效C-string |
const CharT* c_str() const; |
以字符数组的形式返回string |
string 库介绍
在<string>
中, basic_string<>
被定义为所有字符串型别的基本模板类,并且提供了两个basic_string<>
的特化版本:
- string 是针对char的版本
- wstring是针对wchar_t 而定义的特化版本
所有的string 类采用相同的接口,这里的string代表任何string type,包括string, wstring, u16string和u32string。
导入
导入 |
说明 |
#include <string> |
|
using std::string; |
|
0. 其他
函数 |
说明 |
= |
|
assign() |
分配值 |
allocator_type get_allocator() const; |
返回与string关联的分配器 |
1. 参数说明
参数 |
说明 |
const string &str |
整个str字符串 |
const string &str, size_type idx, size_type num |
大部分情况下指字符串str以idx开始的num个字符 |
const char* cstr |
整个C-string cstr |
const char* chars, size_type len |
字符数组chars中的len个字符 |
char c |
字符c |
size_type num, char c |
num 个字符c |
iterator beg, iterator end |
区间[beg,end] 内所有字符 |
2. 构造函数与析构函数
表达式 |
说明 |
string s |
生成一个空字符串s |
string s(str) |
生产字符串str的一个复制品 |
string s(str, stridx) |
将str内“始于stridx”的部分当做字符串s的初值 |
string s(str, stridx, strlen) |
将str内“始于stridx且长度顶多strlen的部分当做字符串s的初值 |
string s(cstr) |
以C-string cstr作为字符串s的初值 |
string s(chars, chars_len) |
以C-string cstr 的前chars_len个字符作为字符串s的初值 |
string s(num, c) |
生成一个字符串,包含num个c字符 |
string s(beg, end) |
以区间 [begin,end]内的字符作为字符串s的初值 |
s.~string() |
销毁所有字符,释放内存 |
你不能以单一字符来初始化某个字符串,如:
std::string s('x') // 错误, 因为此处的是一个字符而非字符串
std::string s({'x'})
std::string s(1,'x')
3. 大小和容量
函数 |
说明 |
s.size(); |
返回string中的字符数 |
s.length(); |
返回string中的字符数,与size()等价 |
s.empty() |
检查string是否为空,空:true |
s.max_size(); |
返回string最多能包含的字符数 |
s.capacity(); |
返回重新分配内存前。string所能包含的最大字符数 |
s.reserve(size_type new_cap); |
更改当前string的内存容量 |
s.shrink_to_fit(); |
请求移除未使用的内存容量 |
4. 元素访问
函数 |
说明 |
[] |
返回索引出的字符引用,不检查索引是否有效 |
reference at( size_type pos ); |
返回索引出的字符引用,检查索引是否有效。 |
CharT& front(); |
返回首字符的引用 |
CharT& back(); |
返回末字符的引用 |
5. 比较操作
6. 清空操作
函数 |
说明 |
void clear(); |
清除所有字符,但不释放内存 |
iterator erase( const_iterator position ); |
移除位于position的字符 |
iterator erase( const_iterator first, const_iterator last ); |
移除范围 [first, last) 中的字符。 |
basic_string& erase( size_type index = 0, size_type count = npos ); |
移除始于index 的 count个字符 |
7. 插入操作