一、string容器–构造函数1.string的基本概念本质string是C风格的字符串二string本质是一个类。2.string和char *区别char *是一个指针。string是一个类类内部封装了char *管理这个字符串是一个char *型的容器。3.特点string类内部封装了很多成员方法。比如查找find、拷贝copy、删除delete、替换replace、插入insert。string管理char *所分配的内存不用担心复制越界和取值越界等由类内部进行负责。4.string构造函数构造函数原型 1string();//创建一个空的字符串例如string str2string(constchar*s);//使用字符串s进行初始化3string(conststringstr);//使用一个string对象初始化另一个string对象。4string(intn,charc);//使用n个字符c初始化//字符串的构造函数#includeiostream#includevector#includestringusingnamespacestd;voidtest01(){string s1;//构造默认constchar*strHELLLO ,ZZYYU;strings2(str);couts2s2endl;strings3(s2);couts3s3endl;strings4(10,a);couts4s4endl;}intmain(){test01();return0;}二、string容器-赋值操作1作用给string字符串进行复制。2赋值的函数原型stringoperator(constchar*s);//char *类型字符串赋值给当前字符串stringoperator(conststrings);//把字符串s赋值给当前的字符串stringoperator(charc);//字符串赋值给当前的字符串stringassign(constchar*s);//把字符串s赋给当前的字符串stringassign(constchar*s,intn);//把字符串s的前n个字符赋给当前的字符串stringassign(intn,charc);//用n个字符c赋给当前的字符串//string 容器的赋值操作#includeiostream#includevector#includestringusingnamespacestd;voidtest01(){string str1;str1hello world;coutstr1str1endl;string str2;str2str1;coutstr2str2endl;string str3;str3a;coutstr3str3endl;string str4;str4.assign(hello c);coutstr4str4endl;string str5;str5.assign(hello c,5);coutstr5str5endl;string str6;str6.assign(str5);coutstr6str6endl;string str7;str7.assign(10,W);coutstr7str7endl;}intmain(){test01();}//输出str1hello world str2hello world str3a str4hello cstr5hello str6hello str7WWWWWWWWWWstring的赋值方式很多一般采用等号赋值。三、string字符串拼接(1作用实现字符串末尾拼接字符串(2)函数原型:stringoperator(constchar*str);//重载操作符stringoperator(constcharc);//重载操作符stringoperator(conststringstr);//重载操作符stringappend(constchar*s);//把字符串s连接到当前字符串结尾stringappend(constchar*s,intn);//把字符串前n个字符连接到当前字符串的结尾stringappend(conststrings);//同operator(const string str)stringappend(conststrings,intpos,intn);//字符串s中从pos开始的n个字符连接到字符串结尾#includeiostream#includevector#includestringusingnamespacestd;voidtest01(){string str1I ;str1like C ;coutstr1str1endl;str1!;coutstr1str1endl;string str2 It is a joke.;str1str2;coutstr2str2endl;string str3I love play ;coutstr3str3endl;str3.append(game llll,4);coutstr3str3endl;str3.append(str2);coutstr3str3endl;//只截取3个字符// str3.append(str2,0,3);// coutstr3str3endl;//参数2是从哪个参数开始截取参数3是截取的字符的个数。str3.append(str2,4,3);coutstr3str3endl;}intmain(){test01();}//输出str1I like Cstr1I like C!str2It is a joke.str3I love play str3I love play game str3I love play game It is a joke.str3I love play game It is a joke.is四、字符串查找和拼接1作用查找查找指定字符串是否存在。替换在指定的位置替换字符串。2函数原型intfind(conststringstr,intpos0)const;//查找str第一次出现位置从pos开始查找intfind(constchar*s,intpos0)const;//查找s第一次出现的位置从pos开始查找intfind(constchar*s,intpos,intn)const;//从pos位置查找s的前n个字符第一次位置intfind(constcharc,intpos)//查找字符c第一次出现的位置intrfind(conststringstr,intposnpos)const;//查找str最后一次位置从pos开始查找intrfind(constchar*s,intposnpos)const;//查找s最后一次位置从pos开始查找intrfind(constchar*s,intposnpos,intn)const;//从pos查找s的前n个字符的最后一次位置intrfind(constcharc,intpos0)const;//查找字符c最后一次出现位置stringreplace(intpos,intn,conststringstr);//替换从pos开始n个字符为字符串strstringreplace(intpos,intn,constchar*s);//替换从pos开始n个字符为字符串s(3)代码实现#includeiostream#includevector#includestringusingnamespacestd;//字符串的查找和替换//1.查找voidtest01(){string str1abcdefg;intposstr1.find(de);coutposendl;if(pos-1){cout未找到字符串endl;}else{coutposposendl;}}intmain(){test01();}//输出3pos3其实find和rfind都是具有查找功能的只是一个是从左往右找一个是从右往左找但是索引下标都是从左往右数。#includeiostream#includevector#includestringusingnamespacestd;//字符串的查找和替换//1.查找voidtest01(){string str1abcdefgde;intposstr1.find(de);coutposendl;if(pos-1){cout未找到字符串endl;}else{coutposposendl;}//rfind和find的区别//rfind是从右往左查找 find是从左往右查找。intpos2str1.rfind(de);coutpos2pos2endl;}intmain(){test01();}3pos3pos27替换效果的代码#includeiostream#includevector#includestringusingnamespacestd;//字符串的查找和替换//1.查找voidtest01(){string str1abcdefgde;intposstr1.find(de);coutposendl;if(pos-1){cout未找到字符串endl;}else{coutposposendl;}//rfind和find的区别//rfind是从右往左查找 find是从左往右查找。intpos2str1.rfind(de);coutpos2pos2endl;}voidtest02(){string str1abcdefg;//从1好位置起的三个字符替换为“ 1111”str1.replace(1,3,1111);coutstr1str1endl;}intmain(){test02();}//输出str1a1111efgfind查找是从左往右rfind是从右往左。find找到字符串后返回查找的第一个字符位置找不到返回-1。replace在替换时要制定从哪个位置起多个字符替换成什么样的字符串。五、string容器–字符串比较1字符串之间的比较2字符串比较是按字符的ASCII码进行对比返回0返回1返回-13函数原型intcompare(conststrings)const;//与字符串s比较intcompare(constchar*s);//与字符串s比较(4)代码实现#includeiostream#includevector#includestringusingnamespacestd;voidtest01(){string str1Hello;string str2Xello;if(str1.compare(str2)0){cout str1 equals str2endl;}elseif(str1.compare(str2)0){coutstr1 bigger than str2endl;}else{coutstr1 smaller than str2endl;}}intmain(){test01();}//输出str1 smaller than str2字符串对比主要是用于比较2个字符串是否相等判断谁打谁小的意义并不是很大。六、字符串存取string中单个字符存取方式有两种。charoperator[](intn);//通过[]方式取字符串charat(intn);//通过at方法获取字符#includeiostream#includevector#includestringusingnamespacestd;//string 字符存取voidtest01(){string strhello;// coutstrendl;//1.通过[]访问的单个字符for(inti0;istr.size();i){coutstr[i] ;}coutendl;//2.通过at方式访问单个字符for(inti0;istr.size();i){coutstr.at(i) ;}coutendl;}intmain(){test01();}//输出h e l l o h e l l o修改其中的某个字符//字符串存取#includeiostream#includevector#includestringusingnamespacestd;//string 字符存取voidtest01(){string strhello;// coutstrendl;//1.通过[]访问的单个字符for(inti0;istr.size();i){coutstr[i] ;}coutendl;//2.通过at方式访问单个字符for(inti0;istr.size();i){coutstr.at(i) ;}coutendl;//修改单个字符str[0]X;coutstrstrendl;}intmain(){test01();}//输出h e l l o h e l l o strXello总结string字符串中单个字符存取有2种方式用[]或at七、string容器–字符串插入和删除1.对string字符串进行插入插入和删除字符操作2.函数原型stringinsert(intpos,constchar*s);//插入字符串stringinsert(intpos,conststringstr);//插入字符串stringinsert(intpos,intn,charc);//在指定位置插入n个字符cstringerase(intpos,intnnpos);//删除从Pos开始的n个字符//字符串的插入和删除#includeiostream#includevector#includestringusingnamespacestd;voidtest01(){string strhello;//插入str.insert(1,111);coutstrstrendl;//删除str.erase(1,3);//从1号位置开始3个字符coutstrstrendl;}intmain(){test01();}strh111ello strhello插入和删除的其实下标都是从0开始。八、子串获取1.功能描述从字符串中获取想要的子串2.函数原型stringsubstr(intpos0,intnnpos)const;//返回由pos开始的n个字符组成的字符串#includeiostream#includevector#includestringusingnamespacestd;//string容器-子串获取voidtest01(){string str1abcdef;string subStrstr1.substr(1,3);coutsubStrsubStrendl;}//实用操作voidtest02(){string emailLisagoogle.com;//从邮件地址中获取用户名信息intposemail.find();coutposposendl;string userNameemail.substr(0,pos);coutuserNameuserNameendl;}intmain(){test02();}//输出pos4userNameLisa