C++string类型总结
c中字符串的几种定义方法及说明

c中字符串的几种定义方法及说明C语言中字符串是一种由字符组成的数据类型,用于存储和操作文本信息。
在C语言中,字符串的定义方法有以下几种:1. 字符数组定义字符串在C语言中,字符串通常使用字符数组来定义。
字符数组是一种连续存储多个字符的容器,可以用来表示字符串。
定义字符数组时,需要指定数组的大小,以容纳字符串的长度。
例如:```cchar str1[10] = "Hello";```上述代码中,定义了一个字符数组`str1`,大小为10。
初始化时,将字符串"Hello"存储在`str1`中。
2. 字符指针定义字符串除了使用字符数组,C语言中还可以使用字符指针来定义字符串。
字符指针指向一个字符数组的首地址,通过改变指针的指向,可以实现对字符串的操作。
例如:```cchar *str2 = "World";```上述代码中,定义了一个字符指针`str2`,并将其指向字符串"World"的首地址。
3. 动态分配内存定义字符串在C语言中,还可以使用动态分配内存的方式定义字符串。
动态分配内存使用`malloc`函数在堆内存中分配空间,并返回指向该空间的指针。
例如:```cchar *str3 = (char *)malloc(20 * sizeof(char));strcpy(str3, "Welcome");```上述代码中,使用`malloc`函数动态分配了20个字符的空间,并将字符串"Welcome"复制到了该空间中。
4. 字符串常量在C语言中,字符串常量是由双引号括起来的字符序列。
字符串常量可以直接在代码中使用,无需定义变量。
例如:```cprintf("Hello World");```上述代码中,直接输出了字符串常量"Hello World"。
c语言 string类型

c语言 string类型string类型是C语言中一种非常重要的数据类型,用于表示字符串。
字符串是指由一连串字符所组成的序列,是C语言编程中非常常见的数据类型。
本文将以“C语言 string类型”为主题,分步骤阐述相关概念和应用。
一、什么是string类型?string类型是C语言中预定义的数据类型之一,用于表示由一定数量的字符所组成的字符串。
它是通过在字符数组末尾追加一个空字符来实现的,因此也称为“以空字符结尾的字符数组”(null-terminated character array)。
二、常见操作1.声明string类型变量声明string类型变量的方式与声明其他数据类型的变量的方式相同,可以通过指定变量名和数据类型来实现。
例如:char str[20];2.初始化string类型变量初始化string类型变量可以通过赋值操作实现,即将一个字符串常量赋值给该变量。
例如:char str[20] = "Hello";3.向string类型变量中添加新的字符向string类型变量中添加新的字符可以通过在指定位置上插入该字符来实现。
例如:str[5] = 'W';4.连接两个string类型变量连接两个string类型变量可以使用C标准库中的strcat函数实现。
例如:char str1[20] = "Hello";char str2[20] = "World";strcat(str1, str2);5.字符串比较C语言中提供了strcmp函数用于比较两个字符串是否相等。
例如:if (strcmp(str1, str2) == 0) {printf("The two strings are equal.\n");} else {printf("The two strings are not equal.\n");}三、常见问题1. string类型变量的长度有何限制?由于每个字符占用一个字节的存储空间,因此string类型变量的长度最多只能为65535个字符。
C++-string常用函数整理(建议收藏)

C++-string常用函数整理(建议收藏)作者:翟天保Steven版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处最近刷笔试题,涉及到许多字符串相关的题目,所以将一些常用的函数整理一下,便于后面查看。
本文后续持续更新。
构造函数:1.string s; // 声明一个s字符串,为空2.string s(ss); // 声明一个s字符串,将ss字符串复制过来3.string s(ss,2); // 声明一个s字符串,将ss字符串从2位置(也就是第三个字符)后的所有字符复制过来4.string s(ss,1,3); // 声明一个s字符串,将ss字符串从1位置(也就是第二个字符)起的3个字符复制过来5.string s(chars); // 声明一个s字符串,将C字符串复制过来6.string s(chars,5); // 声明一个s字符串,将C字符串的前5个字符复制过来7.string s(6,char); // 声明一个s字符串,初值为6个char类型的字符,比如char为'a',则s为aaaaaa析构函数:1.s.~string(); // 将s字符串析构赋值函数:1.string s=c; // 赋值函数,c既可以是字符串,也可以是C字符串,比如char a[]=“123”2.s.assign(ss); // 赋值函数,ss既可以是字符串,也可以是C字符串3.s.assign(ss,1,3); // 赋值函数,ss无论是string字符串还是C字符串,均从1位置开始的3个字符赋值4.s.assign(ss,1); // 赋值函数,ss若为string字符串,则从1位置开始的所有字符赋值;若ss为C字符串,则赋值前1个字符5.s.assign(6,char); //赋值函数,赋为6个char类型的字符6.s.assign(s1.begin(),s1.end()-1); //赋值函数,将s1字符串从开始到倒数第二个字符赋值给s,string有begin和end,C字符串没有哦操作函数:1.swap(s1,s2); // 交换两个字符串2.s.size(); // 返回字符串字符个数3.s.length(); // 返回字符串字符个数4.s.clear(); // 清除所有字符5.s.empty(); // 返回字符串是否为空,若空则true,非空则false6.s.begin(); // 字符串迭代器-开始位置7.s.rbegin(); // 字符串迭代器-逆向开始位置,逆向开始是跳过结束符的第一个字符8.s.end(); // 字符串迭代器-结束位置,注意结束一般是'\0'9.s.rend(); // 字符串迭代器-逆向结束位置10.s.capacity(); // 返回已分配存储的大小11.s.resize(n); // 把字符串的长度设置为n个字符,若s字符串原本为1234,n为2,则resize后的s字符为1212.s.max_size(); // 返回字符串的最大大小13.s.capacity(); // 保留一定量内存以容纳一定数量的字符14.s.at(5); // 输出s字符串5位置的字符(第六个字符)15.getline(cin,s); // 获取一行字符串给s16.s.copy(cs,3,2); // 将s字符串第二个字符后的三个字符,复制到C字符串cs的前三个字符的位置,原字符被替换掉,cs只能是C字符串17.s.c_str(); // 将内容以C_string返回18.s.data(); // 将内容以字符数组形式返回,和c_str()输出基本一致,区别在于data()结尾不补\0,毕竟是数组形式添加函数:1.s+=s1; // 添加函数,直接添加字符串至后方,s1可以是string字符串也可以是C字符串2.s.append(ss); // 添加函数,将ss添加到后方3.s.append(ss,1,3); // 添加函数,ss无论是string字符串还是C 字符串,均将从1位置开始的3个字符添加4.s.append(ss,1); // 添加函数,ss若为string字符串,则将从1位置开始的所有字符添加;若ss为C字符串,则添加前1个字符5.s.append(6,char); //添加函数,添加6个char类型的字符6.s.append(s1.begin(),s1.end()-1); //添加函数,将s1字符串从开始到倒数第二个字符添加到s后面,string有begin和end,C字符串没有哦插入函数:1.s.insert(2,ss); // 插入函数,在s字符串的第二个字符后插入ss2.s.insert(2,ss,4); // 插入函数,若ss为string字符串,则在s字符串的第二个字符后插入ss的前四个字符;若ss为C字符串,则在s 字符串的第二个字符后插入ss第四个字符后的所有字符3.s.insert(2,ss,4,2); // 插入函数,s字符串的第二个字符后插入ss 第四个字符后的2个字符4.s.insert(2,6,char); //插入函数,s字符串的第二个字符后6个char类型的字符5.s.insert(s.begin()+3,'A'); // 插入函数,通过迭代器在s字符串第三个字符后添加1个A字符6.s.insert(s.begin()+3,6,'A'); // 插入函数,通过迭代器在s字符串第三个字符后添加6个A字符7.s.insert(s.begin()+3,ss.begin(),ss.end()); // 插入函数,通过迭代器在s字符串第三个字符后添加ss字符串从开始到结尾的所有字符删除函数:1.s.erase(s.begin()+3); // 删除函数,删除字符串第3个字符后的第一个字符,也就是第四个字符2.s.erase(s.begin(),s.begin()+3); // 删除函数,删除字符串第1到第3的所有字符,虽然s.begin()+3指向从头起第四个字符,但是最后这个字符是不删除的3.s.erase(1,3); // 删除函数,删除字符串从1位置(第二个字符)起的3个字符提取函数:1.s=ss.substr(1,3); // 提取函数,提取ss字符串从1位置起的3个字符给s字符串2.s=ss.substr(); // 提取函数,提取ss字符串的所有内容给s字符串3.s=ss.substr(3); // 提取函数,提取ss字符串从3位置起的所有内容给s字符串查找函数:1.a=s.find('A',1); // 提取函数,a是string::size_type类型,从前面1位置开始查找,查找A字符最早出现的位置,若没找到,则返回string::npos2.a=s.find(ss,1); // 提取函数,从前面1位置开始查找,查找ss 字符串最早出现在s字符串的位置,若没找到,则返回string::npos3.a=s.find(cs,1); // 提取函数,从前面1位置开始查找,查找C字符串cs最早出现在s字符串的位置,若没找到,则返回string::npos4.a=s.find(cs,1,2); // 提取函数,从前面1位置开始查找,查找C 字符串cs中前两个字符最早出现在s字符串的位置,若没找到,则返回string::npos;注意string字符串没有该格式函数5.a=s.rfind('A'); // 提取函数,从后查找,查找A字符最先出现的位置,若没找到,则返回string::npos6.a=s.find_first_of(ss); // 提取函数,从前查找,ss字符串中任一字符出现在s字符串中的位置7.a=s.find_first_of(ss,3); // 提取函数,从第3个字符后查找(即第4个字符开始),ss字符串中任一字符最先出现在s字符串中的位置8.a=s.find_last_of(ss); // 提取函数,从前查找,ss字符串中任一字符最后一次出现在s字符串中的位置;换句话说,从后查找,最先出现的位置9.a=s.find_last_of(ss,3); // 提取函数,从后面第3个字符后查找(即第4个字符开始),ss字符串中任一字符最先出现在s字符串中的位置;换句话说,在s后面第3个字符位置前的字符串中,ss任一字符最后一次出现在此字符串中的位置10.a=s.find_first_not_of(ss); // 提取函数,从前查找,任一非ss 字符串中字符最早出现在s字符串中的位置11.a=s.find_first_not_of(ss,3); // 提取函数,从第3个字符后查找(即第4个字符开始),任一非ss字符串中字符最先出现在s字符串中的位置12.a=s.find_last_not_of(ss); // 提取函数,从前查找,任一非ss 字符串中字符最后一次出现在s字符串中的位置;换句话说,从后查找,最先出现的位置13.a=s.find_last_not_of(ss,3); // 提取函数,从后面第3个字符后查找(即第4个字符开始),任一非ss字符串中字符最先出现在s 字符串中的位置;换句话说,在s后面第3个字符位置前的字符串中,任一非ss字符串中字符最后一次出现在此字符串中的位置哈哈哈,后面这几个find函数是不是看晕了,沉下心来理解一下我说的逻辑,然后自己写个测试代码试试就懂了,编程一定不要背,而是去体会和理解,这样才能活学活用~比较函数:pare(ss); // 比较函数,直接比较s和ss的字符串大小,从第一个字符开始比,若一样则下一个;若s大于ss则返回1,等于返回0,小于返回-1pare(2,2,ss); // 比较函数,用s字符串第二个字符后的两个字符作为子字符串,来和ss比较pare(2,2,ss,1,3); // 比较函数,用s字符串第二个字符后的两个字符作为子字符串,来和ss第一个字符后三个字符组成的子字符串比较替换函数:1.s.replace(1,2,ss); // 替换函数,将s字符串第一个字符后的两个字符替换为ss字符串2.s.replace(s.begin(),s.begin()+3,ss); // 替换函数,将s字符串从头起的三个字符替换为ss字符串3.s.replace(1,2,ss,2,3); // 替换函数,将s字符串第一个字符后的两个字符替换为ss字符串第二个字符后的三个字符4.s.replace(1,2,ss,2); // 替换函数,将s字符串第一个字符后的两个字符被替换,若ss为string字符串,则进行替换的字符串为ss字符串第二个字符后的所有字符;若ss为C字符串,则进行替换的字符串为ss字符串的前两个字符5.s.replace(s.begin(),s.begin()+3,ss,2); // 替换函数,将s字符串从头起的三个字符替换为C字符串ss的前两个字符,注意ss字符串只能是C字符串而不是string字符串6.s.replace(0,3,5,'A’); //替换函数,将s字符串从头起的三个字符替换为5个A字符7.s.replace(s.begin(),s.begin()+3,5,'A’); //替换函数,将s字符串从头起的三个字符替换为5个A字符总结:细心的朋友应该发现了,在string函数的调用过程中,输入参数个数、类型不同可能会带来不同的结果,而string字符串和C字符串(也就是char*)大多数情况下的调用情况一致,比如输入2个数字的时候,第一个数字往往代表了字符操作的起点位置,第二个数字代表了操作的字符个数;但是,如果只输入1个数字X的时候,就有所不同,若字符串是string,则表示从该数字X对应位置往后的所有字符进行操作,若字符串是C字符串,则表示取前X个字符进行操作。
string的几种构造函数

string的几种构造函数在编程中,字符串(string)是一种非常常用的数据类型,用于存储和操作文本。
在C++语言中,string类是用来表示和操作字符串的类。
string类提供了多个构造函数,用于创建字符串对象。
本文将介绍string的几种构造函数,并详细解释它们的用法。
1. 默认构造函数string类的默认构造函数创建一个空的字符串对象。
空字符串是一个长度为0的字符串,不包含任何字符。
我们可以使用以下语法来创建一个空字符串对象:string str;2. 字符数组构造函数string类还提供了一个构造函数,可以使用字符数组来创建字符串对象。
字符数组是一系列字符的集合,以null字符('\0')结尾。
我们可以使用以下语法来创建一个字符串对象:char arr[] = "Hello";string str(arr);这样,str将包含字符数组arr中的所有字符,并以null字符结尾。
需要注意的是,字符数组的长度必须小于或等于字符串对象的最大长度。
3. 字符串构造函数除了字符数组,我们还可以使用另一个字符串来创建字符串对象。
string类提供了一个接受另一个字符串作为参数的构造函数。
我们可以使用以下语法来创建一个字符串对象:string str1 = "Hello";string str2(str1);这样,str2将包含与str1相同的内容。
这个构造函数会创建一个新的字符串对象,而不是简单地将str2指向str1。
4. 子字符串构造函数string类还提供了一个构造函数,可以使用另一个字符串的一部分来创建一个新的字符串对象。
我们可以使用以下语法来创建一个子字符串对象:string str1 = "Hello World";string str2(str1, 0, 5);这样,str2将包含str1中从索引0开始的5个字符,即"Hello"。
string的各种函数(系统学习)

string的各种函数(系统学习)1、按照⾯向对象的要求,可以把字符串看作⼀个对象,设计⼀个串类加以描述。
但是,在⼀般的情况下不必建⽴⾃⼰的串类,c++标准在库<string>中给出了类string,提供了丰富的串操作,程序员使⽤指令: #include<string>即存取这个类。
可将类string视为⼀个容器类,其部分操作如下:构造函数:string s:构造⼀个空串sstring s(a):构造串s,并⽤字符数组a初始化string s(a,n):构造串s,⽤字符数组a的前n个字符初始化string s(str):⽤串str构造串s(拷贝初始化)看下⾯代码验证#include<iostream>#include<string.h>#include<map>#include<cstdio>#include<cstring>#include<stdio.h>#include<cmath>#include<ctype.h>#include<math.h>#include<algorithm>#include<set>#include<queue>typedef long long ll;using namespace std;const ll mod=1e9+7;const int maxn=1e5+10;const int maxk=3e5+10;const int maxx=1e4+10;const ll maxe=1000+10;#define INF 0x3f3f3f3f3f3f#define Lson l,mid,rt<<1#define Rson mid+1,r,rt<<1|1int main(){char a[maxn];cin>>a;//输⼊abcdefghstring s(a);//结果为abcdefghstring s1(a,5);//结果为abcdestring s2(s1);//结果为abcdecout<<s<<endl;cout<<s1<<endl;cout<<s2<<endl;return0;}输⼊输出:getline(cin,s,delim):从cin中提取字符存⼊串s中,当遇到delim或者提取的字符个数等于s的长度时结束,如果⾃⼰不设定,默认为'\n' getline(cin,s):遇到'\n'结束cin>>s:遇到空⽩字符终⽌提取,空⽩字符不被读取cout<<s:输出s#include<iostream>#include<string.h>#include<map>#include<cstdio>#include<cstring>#include<stdio.h>#include<cmath>#include<ctype.h>#include<math.h>#include<algorithm>#include<set>#include<queue>typedef long long ll;using namespace std;const ll mod=1e9+7;const int maxn=1e5+10;const int maxk=3e5+10;const int maxx=1e4+10;const ll maxe=1000+10;#define INF 0x3f3f3f3f3f3f#define Lson l,mid,rt<<1#define Rson mid+1,r,rt<<1|1int main(){string s;while(getline(cin,s,'#')){getchar();//⾃⼰指定了字符要加getchar,不然结果会多出⼀个换⾏,但是默认情况下不⽤加getcharcout<<s<<endl;}return0;}操作符:s=val:赋值操作,val可以是⼀个串,⼀个字符或⼀个字符数组s+=val:将val添加到串s之后s[pos]:下标操作s+t,t+s:s和t的连接,返回连接的结果。
(完整版)C语言字符串操作总结大全(超详细)

例程:
#include <iostream.h>
#include <string.h>
void main(void)
{
char str1[] = { "Tsinghua "};
char str2[] = { "Computer"};
cout <<strcpy(str1,str2)<<endl;
strncpy(char destination[], const char source[], int numchars);
strncpy:将字符串source中前numchars个字符拷贝到字符串destination中。
strncpy函数应用举例
原型:strncpy(char destination[], const char source[], int numchars);
C语言字符串操作总结大全(超详细)
1)字符串操作
strcpy(p, p1)复制字符串
strncpy(p, p1, n)复制指定长度字符串
strcat(p, p1)附加字符串
strncat(p, p1, n)附加指定长度字符串
strlen(p)取字符串长度
strcmp(p, p1)比较字符串
strcasecmp忽略大小写比较字符串
查找字串string中首次出现的位置, NULL结束符也包含在查找中.返回一个指针,指向字符c在字符串string中首次出现的位置,如果没有找到,则返回NULL.
char *strrchr(const char *string, int c);
c 参数 字符串

c 参数字符串C参数字符串是指在C语言中,以字符串形式传递给程序的参数。
在C语言中,程序可以接受命令行参数,这些参数以字符串的形式传递给主函数。
本文将对C参数字符串进行详细介绍和解析。
我们需要了解C语言中的字符串。
字符串是由字符组成的一串数据,以null结尾。
在C语言中,字符串常常使用字符数组来表示,例如char str[] = "Hello World!"。
其中,str是一个字符数组,用来存储字符串"Hello World!"。
在C语言中,字符串的每个字符都是以ASCII码的形式存储的。
接下来,我们来看一下C参数字符串的使用。
当我们在命令行中运行一个C程序时,可以在程序名后面添加参数,这些参数就会以字符串的形式传递给程序。
例如,我们运行一个名为"program"的C程序,并传递两个参数"arg1"和"arg2",可以这样输入命令:"program arg1 arg2"。
在程序中,我们可以通过main函数的参数argc和argv来接收这些参数。
其中,argc是一个整数,表示命令行参数的个数,而argv是一个字符指针数组,用来存储这些参数的字符串。
argv[0]存储的是程序的名称,argv[1]存储的是第一个参数,argv[2]存储的是第二个参数,依此类推。
C参数字符串的使用非常灵活,可以用于传递各种类型的数据。
例如,我们可以将文件名作为参数传递给程序,程序可以根据文件名读取文件的内容。
我们也可以将数字作为参数传递给程序,程序可以根据这些数字进行相应的计算。
另外,我们还可以将字符串作为参数传递给程序,程序可以根据这些字符串进行相应的操作。
在程序中,我们可以使用C参数字符串来实现各种功能。
例如,我们可以根据参数的不同执行不同的操作。
我们可以使用条件语句来判断参数的值,然后执行相应的代码。
c++string类的原理

c++string类的原理
C++ 中的 string 类是标准库中的一部分,它提供了一种方便
的方式来处理字符串。
string 类的原理涉及到动态内存分配和管理。
在 string 类中,字符串被存储为字符数组,但是与传统的字符数
组不同的是,string 类能够动态地调整存储空间,以便容纳任意长
度的字符串。
当创建一个 string 对象时,它会动态分配一块内存来存储字
符串的内容。
如果字符串的长度超过了当前分配的内存空间,
string 类会自动重新分配更大的内存空间,并将原来的字符串内容
复制到新的内存空间中。
这种动态内存管理使得 string 类能够灵
活地处理不同长度的字符串,而不需要开发者手动管理内存。
此外,string 类还提供了许多成员函数来操作字符串,比如查找、替换、连接等功能。
这些函数使得对字符串的处理变得更加方
便和高效。
总的来说,C++ 中的 string 类的原理涉及动态内存分配和管理,以及提供了丰富的成员函数来操作字符串,从而使得字符串处
理变得更加灵活和方便。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
对C++中string类型的总结string类对象的构造简化构造函数原型如下(注意,为了简便,把模板中最后一个默认参数省略了):1: explicit basic_string();2: string(const char *s);3: string(const char *s, size_type n);4: string(const string& str);5: string(const string& str, size_type pos, size_type n);6: string(size_type n, E c);7: string(const_iterator first, const_iterator last);string对象的操作字符串比较支持六种关系运算符(==、!=、>、>=、<、<=),其采用字典排序策略(与C中字符串比较策略完全一样)。
这六个关系运算符是非成员的重载运算符。
而这些运算符都支持三种操作数组合:string op string、string op const char*、const char* op string(其中op是前面六种关系运算符中任意一种)。
解释:提供运算符的三种重载版本主要是从效率角度考虑的,其避免了临时string对象的产生。
另外,string类还提供了各种重载版本的成员函数compare来比较,简化函数原型为:1: int compare(const string& str) const;2: int compare(size_type p0, size_type n0, const string& str);3: int compare(size_type p0, size_type n0, const string& str, si ze_type pos, size_type n);4: int compare(const char* s) const;5: int compare(size_type p0, size_type n0, const char* s) const;6: int compare(size_type p0, size_type n0, const char* s, size_t ype n) const;返回值:如果调用该函数的对象的比较序列小于操作数比较序列,则返回负数;若相等,则返回0;否则,返回正数。
∙字符串相加针对string类提供了非成员重载operator+,支持string对象之间、string 对象与const char*对象之间、string对象与char对象之间相加,并且operator + 两边的操作数的任意顺序都支持。
简化函数原型如下:1: string operator+ (const string& lhs, const string& rhs);2: string operator+ (const string& lhs, const char *rhs);3: string operator+ (const string& lhs, char rhs);4: string operator+ (const char *lhs, const string& rhs);5: string operator+ (char lhs, const string& rhs);∙字符串赋值字符串赋值有两种方式:一是利用成员重载运算符operator=;另外就是使用成员重载函数assign可以更加灵活地处理。
这里只提供简化函数原型供参考:1: string& operator=(char c);2: string& operator=(const char *s);3: string& operator=(const string& rhs);4: string& assign(const char *s);5: string& assign(const char *s, size_type n);6: string& assign(const string& str, size_type pos, size_type n);7: string& assign(const string& str);8: string& assign(size_type n, char c);9: string& assign(const_iterator first, const_iterator last);∙字符串追加字符串追加同样有两种方式:一是operator+=;另外就是成员函数append。
简化函数原型如下:1: string& operator+=(char c);2: string& operator+=(const char *s);3: string& operator+=(const string& rhs);4: string& append(const char *s);5: string& append(const char *s, size_type n);6: string& append(const string& str, size_type pos, size_type n);7: string& append(const string& str);8: string& append(size_type n, char c);9: string& append(const_iterator first, const_iterator last);∙读取子串获取某个下标处的字符:一是用at成员函数;另外就是用operator[]。
获取子串,可以用成员函数c_str及substr,还有成员函数data和copy。
简化函数原型如下:1: reference operator[](size_type pos);2: const_reference operator[](size_type pos) const;3: reference at(size_type pos);4: const_reference at(size_type pos) const;5:6: const char *c_str() const;7: const char *data() const;8: string substr(size_type pos = 0, size_type n = npos) const; 9: size_type copy(char *s, size_type n, size_type pos = 0) cons t;注意:若at函数的参数pos无效,则抛出异常out_of_range;但如果oper ator[]的参数pos无效,则属于未定义行为。
所以at比operator[]更加安全。
其中,copy返回实际拷贝的字符数。
∙替换子串成员函数replace实现替换某个子串。
简化函数原型如下:1: string& replace(size_type p0, size_type n0, const char *s); 2: string& replace(size_type p0, size_type n0, const char *s, s ize_type n);3: string& replace(size_type p0, size_type n0, const string& st r);4: string& replace(size_type p0, size_type n0, const string& st r, size_type pos, size_type n);5: string& replace(size_type p0, size_type n0, size_type n, cha r c);6: string& replace(iterator first0, iterator last0, const char *s);7: string& replace(iterator first0, iterator last0, const char *s, size_type n);8: string& replace(iterator first0, iterator last0, const strin g& str);9: string& replace(iterator first0, iterator last0, size_type n, char c);10: string& replace(iterator first0, iterator last0, const_itera tor first, const_iterator last);这里,可能需要用到这几个函数得到整个字符序列:1: const_iterator begin() const;2: iterator begin();3: const_iterator end() const;4: iterator end();∙插入字符串成员函数insert实现在某点处插入字符串。
简化函数原型如下:1: string& insert(size_type p0, const char *s);2: string& insert(size_type p0, const char *s, size_type n);3: string& insert(size_type p0, const string& str);4: string& insert(size_type p0, const string& str, size_type pos, size_type n);5: string& insert(size_type p0, size_type n, char c);6: iterator insert(iterator it, char c);7: void insert(iterator it, const_iterator first, const_iterator last);8: void insert(iterator it, size_type n, char c);注意:insert函数是在插入点(p0 or it)之前插入字符串。