string
string 本质是一个类,封装了动态数组,是以子节为最小存储单元的动态容器
string 内部的三个指针:
char* start_; char* end_; char* finish_;
因此,string 容器不需要空字符零,使用 finish 和Start 就可以算出
构造函数
string(); 创建一个长度为0得string 对象,默认构造函数
string(const char* s) 使用字符串s初始化
string(const string& str) 使用string对象str初始化另一个string对象
string(size_t n, char c) 创建一个由n个字符c组成得string对象
string(const char* s, size_t n)
将前n个字符保存下来,当n大于字符串长度时(无视其结束),会出现乱码
string(const string& str, size_t pos = 0 , size_t n = npos)
从 pos的位置起,截取 npos个字符 ,缺省则表示截取从pos起整个数组
template<class T> string(T begin, T end); 使用迭代器的方法创建字符串
string(string && str) noexcept; 采用移动构造的方对右值引用str进行构造
string(initializer_list<char> il) 将一个string 对象初始化为 初始化列表il中的字符。
特性操作
int capacity() const; 返回当前容量
int length() const ; 返回当前数据的大小,从字符串角度出发
int size() const; 返回当前数据的大小,从容器角度触发
bool empty() const; 返回容器是否为空
void clear(); 清空容器
void reserve(size_t size = 0) 将容器容量设置为 size
void resize(int len, char c = 0); 将容器实际大小设置为Len,如果len < 实际大小,则截断,
反之用c填充
字符操作
char& operator[](int n);
const char& operator[](int n) const; // 只读
char & at(int n);
const char & at(int n ) const; // 只读
上述用于返回容器中第 n 个元素,但是at函数提供范围检查,越界会抛出out_of_range异常
const char* c_str() const; 返回容器中的动态数组的首地址
const char* data() const; 返回容器中的动态数组的首地址
int copy(char* s, int npos, int pos=0) const;
从当前容器中的pos开始的npos个子节拷贝到s中,返回实际拷贝数目
赋值操作
string& operator=(const char* s)
string& operator=(const string &s)
string& operator=(char c)
string& assign(const char *s)
string& assign(const char *s, int n) 把字符串s的前n个字符赋值给当前的字符串
string& assign(const string &s)
string& assign(int n ,char c); 将n个c赋值为字符串
拼接操作
string& operator+=(const char *str)
string& operator+=(const char c )
string& operator+=(const string &str)
string& append(const char *s)
string& append(const char *s , int n) 将s地址后n个字符拼接到当前容器
string& append(const string &str)
string& append(const string &s ,int pos ,int n) 字符串s中从pos开始的n个字符连接到字符串尾
交换操作
void swap(string & str) ; 如果数据量小,交换的是动态数组的内容,如果数据量大,交换的是动态数组的地址。
截取操作
string substr(size_t pos = 0, size_t n = npos) const; 返回pos开始的n 个字节组成的子容器
比较操作
bool operator==(const string &str1, const string &str2) const; 比较两个字符串是否相等(有两个参数)
int compare(const string & str) const;
int compare(size_t pos, size_t n, const string &str) const; 比较当前字符串从pos开始的n个字节与str的关系
int compare(size_t pos, size_t n, const string &str, size_t pos2, size_t n2) const;
int compare(const char*s) const;
比较成功返回0, 失败返回-1;
查找操作
size_t find(char c, size_t pos =0); 从pos开始查找字符c在当前字符串的位置
size_t find(const char* s, size_t pos =0) const; 查找从pos开始的字符串s在当前的位置
size_t find(const char* s, size_t pos, size_t n); 查找字符串s从pos开始的n个字符在当前串中的位置
size_t find(const string & str, size_t pos=0) const; 从pos 开始查找字符串s在当前串中的位置
size_t rfind(const char* s, size_t pos =0) const; 从右往左查
查找成功返回下标,否则返回-1
替换操作
string& replace(size_t pos, size_t len, const string& str); 当前字符串中从pos开始的len长度将其替换为str
string& replace(size_t pos, size_t len, const string& str, size_t subpos, size_t sublen = npos);
插入操作
string& insert(size_t pos, const string& str); 从pos起插入str字符串
string& insert(size_t pos, const string& str, size_t subpos, size_t sublen = npos); 从pos起插入str的subpos开始的npos长度
string& insert(size_t pos, const char* s);
string& insert(size_t pos, const cahr* s, size_t n);
删除操作
string& erase(size_t pos = 0, size_t n = npos); 删除pos开始的n个字符