当前位置: 首页 > news >正文

C++~~~string容器(p22-P30)

一、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(conststring&str);//使用一个string对象初始化另一个string对象。4string(intn,charc);//使用n个字符c初始化
//字符串的构造函数#include<iostream>#include<vector>#include<string>usingnamespacestd;voidtest01(){string s1;//构造默认constchar*str="HELLLO ,ZZYYU";strings2(str);cout<<"s2="<<s2<<endl;strings3(s2);cout<<"s3="<<s3<<endl;strings4(10,'a');cout<<"s4="<<s4<<endl;}intmain(){test01();return0;}

二、string容器-赋值操作

(1)作用:给string字符串进行复制。
(2)赋值的函数原型

string&operator=(constchar*s);//char *类型字符串赋值给当前字符串string&operator=(conststring&s);//把字符串s赋值给当前的字符串string&operator=(charc);//字符串赋值给当前的字符串string&assign(constchar*s);//把字符串s赋给当前的字符串string&assign(constchar*s,intn);//把字符串s的前n个字符赋给当前的字符串string&assign(intn,charc);//用n个字符c赋给当前的字符串
//string 容器的赋值操作#include<iostream>#include<vector>#include<string>usingnamespacestd;voidtest01(){string str1;str1="hello world";cout<<"str1="<<str1<<endl;string str2;str2=str1;cout<<"str2="<<str2<<endl;string str3;str3='a';cout<<"str3="<<str3<<endl;string str4;str4.assign("hello c++");cout<<"str4="<<str4<<endl;string str5;str5.assign("hello c++",5);cout<<"str5="<<str5<<endl;string str6;str6.assign(str5);cout<<"str6="<<str6<<endl;string str7;str7.assign(10,'W');cout<<"str7="<<str7<<endl;}intmain(){test01();}
//输出str1=hello world str2=hello world str3=a str4=hello c++str5=hello str6=hello str7=WWWWWWWWWW

string的赋值方式很多,一般采用等号赋值。

三、string字符串拼接

(1)作用:实现字符串末尾拼接字符串

(2)函数原型:

string&operator+=(constchar*str);//重载+=操作符string&operator+=(constcharc);//重载+=操作符string&operator+=(conststring&str);//重载+=操作符string&append(constchar*s);//把字符串s连接到当前字符串结尾string&append(constchar*s,intn);//把字符串前n个字符连接到当前字符串的结尾string&append(conststring&s);//同operator+=(const string & str)string&append(conststring&s,intpos,intn);//字符串s中从pos开始的n个字符连接到字符串结尾
#include<iostream>#include<vector>#include<string>usingnamespacestd;voidtest01(){string str1="I ";str1+="like C++ ";cout<<"str1="<<str1<<endl;str1+='!';cout<<"str1="<<str1<<endl;string str2=" It is a joke.";str1+=str2;cout<<"str2="<<str2<<endl;string str3="I love play ";cout<<"str3="<<str3<<endl;str3.append("game llll",4);cout<<"str3="<<str3<<endl;str3.append(str2);cout<<"str3="<<str3<<endl;//只截取3个字符// str3.append(str2,0,3);// cout<<"str3="<<str3<<endl;//参数2是从哪个参数开始截取,参数3是截取的字符的个数。str3.append(str2,4,3);cout<<"str3="<<str3<<endl;}intmain(){test01();}
//输出str1=I like C++str1=I like C++!str2=It is a joke.str3=I love play str3=I love play game str3=I love play game It is a joke.str3=I love play game It is a joke.is

四、字符串查找和拼接

(1)作用:
查找:查找指定字符串是否存在。
替换:在指定的位置替换字符串。
(2)函数原型:

intfind(conststring&str,intpos=0)const;//查找str第一次出现位置,从pos开始查找intfind(constchar*s,intpos=0)const;//查找s第一次出现的位置,从pos开始查找intfind(constchar*s,intpos,intn)const;//从pos位置查找s的前n个字符第一次位置intfind(constcharc,intpos)//查找字符c第一次出现的位置intrfind(conststring&str,intpos=npos)const;//查找str最后一次位置,从pos开始查找intrfind(constchar*s,intpos=npos)const;//查找s最后一次位置,从pos开始查找intrfind(constchar*s,intpos=npos,intn)const;//从pos查找s的前n个字符的最后一次位置intrfind(constcharc,intpos=0)const;//查找字符c最后一次出现位置string&replace(intpos,intn,conststring&str);//替换从pos开始n个字符为字符串strstring&replace(intpos,intn,constchar*s);//替换从pos开始n个字符为字符串s

(3)代码实现

#include<iostream>#include<vector>#include<string>usingnamespacestd;//字符串的查找和替换//1.查找voidtest01(){string str1="abcdefg";intpos=str1.find("de");cout<<pos<<endl;if(pos==-1){cout<<"未找到字符串"<<endl;}else{cout<<"pos="<<pos<<endl;}}intmain(){test01();}
//输出3pos=3

其实find和rfind都是具有查找功能的,只是一个是从左往右找,一个是从右往左找,但是索引下标都是从左往右数。

#include<iostream>#include<vector>#include<string>usingnamespacestd;//字符串的查找和替换//1.查找voidtest01(){string str1="abcdefgde";intpos=str1.find("de");cout<<pos<<endl;if(pos==-1){cout<<"未找到字符串"<<endl;}else{cout<<"pos="<<pos<<endl;}//rfind和find的区别//rfind是从右往左查找 ,find是从左往右查找。intpos2=str1.rfind("de");cout<<"pos2="<<pos2<<endl;}intmain(){test01();}
3pos=3pos2=7

替换效果的代码

#include<iostream>#include<vector>#include<string>usingnamespacestd;//字符串的查找和替换//1.查找voidtest01(){string str1="abcdefgde";intpos=str1.find("de");cout<<pos<<endl;if(pos==-1){cout<<"未找到字符串"<<endl;}else{cout<<"pos="<<pos<<endl;}//rfind和find的区别//rfind是从右往左查找 ,find是从左往右查找。intpos2=str1.rfind("de");cout<<"pos2="<<pos2<<endl;}voidtest02(){string str1="abcdefg";//从1好位置起的三个字符,替换为“ 1111”str1.replace(1,3,"1111");cout<<"str1="<<str1<<endl;}intmain(){test02();}
//输出str1=a1111efg

find查找是从左往右,rfind是从右往左。
find找到字符串后返回查找的第一个字符位置,找不到返回-1。
replace在替换时,要制定从哪个位置起,多个字符,替换成什么样的字符串。

五、string容器–字符串比较

(1)字符串之间的比较

(2)字符串比较是按字符的ASCII码进行对比

=返回0>返回1<返回-1

(3)函数原型

intcompare(conststring&s)const;//与字符串s比较intcompare(constchar*s);//与字符串s比较

(4)代码实现

#include<iostream>#include<vector>#include<string>usingnamespacestd;voidtest01(){string str1="Hello";string str2="Xello";if(str1.compare(str2)==0){cout<<" str1 equals str2"<<endl;}elseif(str1.compare(str2)>0){cout<<"str1 bigger than str2"<<endl;}else{cout<<"str1 smaller than str2"<<endl;}}intmain(){test01();}
//输出str1 smaller than str2

字符串对比主要是用于比较2个字符串是否相等,判断谁打谁小的意义并不是很大。

六、字符串存取

string中单个字符存取方式有两种。

char&operator[](intn);//通过[]方式取字符串char&at(intn);//通过at方法获取字符
#include<iostream>#include<vector>#include<string>usingnamespacestd;//string 字符存取voidtest01(){string str="hello";// cout<<str<<endl;//1.通过[]访问的单个字符for(inti=0;i<str.size();i++){cout<<str[i]<<" ";}cout<<endl;//2.通过at方式访问单个字符for(inti=0;i<str.size();i++){cout<<str.at(i)<<" ";}cout<<endl;}intmain(){test01();}
//输出h e l l o h e l l o

修改其中的某个字符

//字符串存取#include<iostream>#include<vector>#include<string>usingnamespacestd;//string 字符存取voidtest01(){string str="hello";// cout<<str<<endl;//1.通过[]访问的单个字符for(inti=0;i<str.size();i++){cout<<str[i]<<" ";}cout<<endl;//2.通过at方式访问单个字符for(inti=0;i<str.size();i++){cout<<str.at(i)<<" ";}cout<<endl;//修改单个字符str[0]='X';cout<<"str="<<str<<endl;}intmain(){test01();}
//输出h e l l o h e l l o str=Xello

总结:string字符串中单个字符存取有2种方式,用[]或at

七、string容器–字符串插入和删除

1.对string字符串进行插入插入和删除字符操作
2.函数原型:

string&insert(intpos,constchar*s);//插入字符串string&insert(intpos,conststring&str);//插入字符串string&insert(intpos,intn,charc);//在指定位置插入n个字符cstring&erase(intpos,intn=npos);//删除从Pos开始的n个字符
//字符串的插入和删除#include<iostream>#include<vector>#include<string>usingnamespacestd;voidtest01(){string str="hello";//插入str.insert(1,"111");cout<<"str="<<str<<endl;//删除str.erase(1,3);//从1号位置开始3个字符cout<<"str="<<str<<endl;}intmain(){test01();}
str=h111ello str=hello

插入和删除的其实下标都是从0开始。

八、子串获取

1.功能描述:从字符串中获取想要的子串
2.函数原型

stringsubstr(intpos=0,intn=npos)const;//返回由pos开始的n个字符组成的字符串
#include<iostream>#include<vector>#include<string>usingnamespacestd;//string容器-子串获取voidtest01(){string str1="abcdef";string subStr=str1.substr(1,3);cout<<"subStr="<<subStr<<endl;}//实用操作voidtest02(){string email="Lisa@google.com";//从邮件地址中获取用户名信息intpos=email.find("@");cout<<"pos="<<pos<<endl;string userName=email.substr(0,pos);cout<<"userName="<<userName<<endl;}intmain(){test02();}
//输出pos=4userName=Lisa
http://www.jsqmd.com/news/1397919/

相关文章:

  • 2026年广州配眼镜品牌推荐测评:口碑前十名,配镜不踩坑 - 优企甄选
  • 没有下载按钮也不怕:N_m3u8DL-RE 跨平台流媒体下载工具上手全指南
  • 彻底清理Windows远程桌面连接历史记录:注册表、凭据与脚本全攻略
  • 汽车品牌出海TikTok怎么做本地化?从官方账号到KOC矩阵搭建全流程
  • 自动驾驶感知新范式:从密集BEV到稀疏4D的架构跃迁与工程实践
  • 别被坑了!PHP文件上传下载源码,安全漏洞一抓一个准
  • 基于AI Agent与Slack Bolt构建智能团队助手实战指南
  • 银行业AI落地实战:从政策解读到信用评分模型部署全流程
  • StreamArena:长时视频理解基准测试平台解析与应用指南
  • 老Mac升级工具从入门到实战:OpenCore Legacy Patcher完整教程,手把手让旧电脑跑上新系统
  • 2026年专业的圆度圆柱仪选购全指南 一文理清圆度圆柱仪哪个厂家好 - 起跑123
  • 2026成都黄金回收避坑手册,大盘价减三计价,变现认准无损验金商家 - 资讯快报员
  • CTF自学教程:从零构建网络安全实战能力
  • 0445-Bomb-实现进入下一关
  • IDEA图形化Git操作指南:Merge Request模式下的高效协作与冲突解决
  • 面向编程代理的开源视频编辑器:API化视频处理与自动化集成指南
  • 全局快捷键突然失灵?3步完成热键冲突检测,揪出偷走按键的进程
  • 下班后的《绝区零》,终于不用再“上班“了
  • AI基准测试内测指南:从环境准备到高效反馈的全流程实践
  • 游戏刚启动就闪退?MelonLoader启动失败从排查到修复的完整自救手册
  • C语言内存初始化:静态数组与malloc动态内存管理详解
  • 一条命令搞定 M3U8 视频下载:N_m3u8DL-RE 完整上手手册
  • 2026解析圆度圆柱仪哪个厂家好 精密测量设备选型全指南 - 起跑123
  • 覆铜板如何决定PCB高速信号完整性(SI)性能?
  • AI生成柯基图片的多模型协同工作流与优化技巧
  • 杜绝称重猫腻!广州合规黄金回收门店计量标准公示 - 资讯早知道
  • 人形机器人微表情解码系统(下)
  • 一站式 IDEA API 调试插件实战:Cool Request 快速上手指南
  • 蛋白质结构预测批量处理实战:用 ColabFold 一次搞定上百条序列
  • LLM工程实践:为何应追求结构化输出而非拟人化表达