string类封装了char*,是由一个char*型容器管理这个字符串的。和char*比较起来,string类不必担心内存是否足够、字符串长度等,而且作为一个类出现,它集成的操作函数足以满足大多数情况下的需求。并且string重载了左移运算符和右移运算符,可以把它看成是一个C++的基本数据类型。
string类的使用需要包含头文件#include<string>。
1.string类的特性
int capacity()const; //返回当前容量(即string类中不必增加内存即可存放的元素个数) |
int max_size()const; //返回string对象中可存放的最大字符串的长度 |
int size()const; //返回当前字符串的大小 |
int length()const; //返回当前字符串的长度 |
bool empty()const; //当前字符串是否为空 |
void resize(int len,char c); //把字符串当前大小置为len,并用字符c填充不足的部分 |
2.string类的构造函数
string(); //默认的构造函数 |
string(const string &str); //拷贝构造函数 |
string(const char* c); //用字符串c初始化 |
string(int n,char ch); //用n个ch字符串初始化 |
3.string类与char*类型的转换
很多场合下都会用到char*类型的参数,string提供了以下函数来把string类转换为char*类型。
char* 到string的转换直接赋值即可。
string到char*的转换如下:
const char* data() const; //返回一个非null终止的字符串数组 |
const char* c_str() const; //返回一个以null终止的字符串 |
int copy(char* c,int n,int pos=0) const; //把当前串以pos开始的n个字符拷贝到以c为起始位置的字符数组中,返回实际拷贝的树目 |
4.string类的插入和删除
string &insert(int p0,const char* c); //在p0处插入字符串c |
string &insert(int p1,const char* c,int n); //在p1处插入字符串c的前n个字符 |
string &insert(int p2,const string &s); //在p2处插入字符串s |
string &insert(int p3,const string &s,int n); //在p3处插入字符串的前n个字符 |
string &insert(int p4,int n,char c); //在p4处插入n个字符c |
iterator insert(iterator it,char c); //在it处插入字符c,返回插入之后迭代器的位置 |
void insert(iterator it,const_iterator first,const_iterator last); //在it处插入[first, last)之间的字符 |
void insert(iterator it,int n,char c); //在it处插入n个字符c |
iterator erase(iterator first,iterator last); //删除[first, last)之间的所有字符,返回删除之后迭代器的位置 |
iterator erase(iterator it); //删除it指向的字符,返回删除后迭代器的位置 |
string &erase(int pos=0,int n); //删除pos开始的n个字符,返回修改后的字符串 |
另外string类重载了数组下标运算符,我们可以像操作数组一样操作字符串,同时string类提供了一个at()函数,用于获取字符串的第n个元素。operator[]和at()均返回当前字符串中第n个字符的位置,但是at()函数提供范围检查,当越界时会抛出异常,下标运算符不提供检查访问。