1.string除了与其他顺序容器相同的构造函数,还额外支持另外三个构造函数。
构造string的方法 | |
---|---|
string s(cp, n) | s是cp指向的数组中前n个字符的拷贝。此数组至少应该包含n个字符 |
string s(s2,pos2) | s是string s2从下标pos2 开始的字符的拷贝。若pos2>s2.size(),则此类行为未定义 |
string s(s2,pos2,len2) | s是string s2从下标开始len2个字符的拷贝,若pos2>s2.size(),构造函数的行为未定义。不管len2的值是多少,构造函数至多拷贝s2.size()-pos2个字符 |
以上的构造函数接收string或者const char*参数,还接收指定拷贝多少个字符的参数。
2.substr操作,返回一个string,是原始string的一部分或者全部拷贝。可以传递给substr一个可选的位置和计数值:
substr(pos, n);//返回一个string,包含s中从pos开始的n个字符的拷贝。
//pos的默认值为0.n的默认值为是s.size()-pos,即拷贝从pos开始的所有字符。
string除了接收迭代器的insert和erase版本外,string还提供了接收下标的版本。下标指出了开始删除的位置,获知是insert到给定值之前的位置
s.insert(s.size(),5,'!');//在s末尾插入5个感叹号
s.erase(s.size()-5,5);//从s末尾删除最后五个字符
3.标准库string类型还提供了接收c风格字符串数组的insert和assign版本。
例如:
const char *cp = "Stately, plump Buck";
s.assign(cp, 7);//s=="stately"
s.insert(s.size(),cp+7);//s=="Statelu, plump Buck";
首先调用assign替换s的内容,赋予s的是从cp指向的地址开始的7个字符。要求赋值的字符数必须小于等于cp指向的数组中的字符数。
4.append和replace函数
string类定义了两个额外的成员函数:append和replace,这两个函数可以改变string的内容。
修改string的操作 | |
---|---|
s.insert(pos,args) | 在pos之前插入args指定的字符。pos可以是一个下标或者一个迭代器。接收下标版 返回指向s的引用,而接收迭代器版本返回第一个插入字符 的迭代器 |
s.erase(pos,len) | 删除从位置pos开始的len个字符。如果len被省略,则删除从pos开始直至s末尾的所有字符。返回一个指向s的引用 |
s.assign(args) | 将s中的字符串替换为args。返回一个指向s的引用 |
s.append(args) | 将args追加到s。返回一个指向s的引用 |
s.replace(range,args) | 删除s中范围range内的字符,替换为args指定的字符。range或者是一个下标和一个长度,或者是一对指向s的迭代器,返回指向s的引用 |
5.string搜索操作
搜索操作返回指定字符出现的下标,如果未找到则返回npos
string搜索操作 | |
---|---|
s.find(args) | 查找s中args第一次出现的位置 |
s.rfind(args) | 查找s中args最后一次出现的位置(其实是从后往前找) |
s.find_first_of(args) | 查找s中args中任何一个字符第一次出现的位置 |
s.find_last_of(args) | 查找s中args任何一个字符最后一次出现的位置 |
s.find_first_not_of(args) | 查找s中第一个不在args中的字符 |
s.find_last_not_of(args) | 在s中查找最后一个不在args中的字符 |
args必须是以下的形式之一 | |
c,pos | 从s中位置pos开始查找字符c,pos默认为0 |
s2,pos | 从s中位置pos开始查找字符串s2。pos默认为0 |
cp,pos | 从s中位置pos开始查找指针cp指向的以空字符结尾的c风格字符串 |
cp,pos,n | 从s中位置pos开始查找指针cp指向的数组的前n个字符。pos和n无默认值 |
6.compare函数
s.compare的几种参数形式 | |
---|---|
s2 | 比较s和s2 |
pos1,n1,s2 | 将s中从pos1开始的n1个字符与s2进行比较 |
pos1,n1,s2,pos2,n2 | 将s中从pos1开始的n1个字符与s2中从pos2开始的n2个字符进行比较 |
cp | 比较s与cp指向的以空字符结尾的字符数组 |
pos1,n1,cp | 将s中以pos1开始的n1个字符与cp指向的空字符结尾的c风格字符数组进行比较 |
pos1,n1,cp,n2 | 将s中从pos1开始的n1个字符与指针cp指向的地址开始的n2个字符进行比较 |