【STL常用容器】:string 容器
创始人
2024-03-04 22:16:49
0

文章目录

  • 前言
  • 一、string容器的基本概念
  • 二、字符串的创建构造
  • 三、string 赋值操作
  • 四、string 字符串拼接
  • 五、string 查找和替换
  • 六、string字符串比较
  • 七、string 字符的存取
  • 八、string的插入和删除
  • 九、string 子串
    • 例:取出邮箱中的用户名

前言

时不可以苟遇,道不可以虚行。


一、string容器的基本概念

  • 本质: string 是 C++ 风格的字符串,而 string 本质上是一个类。

stringchar* 的区别:

  • char * 是一个指针
  • string 是一个类,类内部封装了 char * ,管理这个字符串,是一个 char* 型的容器。

特点:

  • string 类内部封装了很多成员方法
  • 例如:查找 find、拷贝 copy、删除 delete、替换 replace、插入 insert
  • string 管理 char* 所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责。

二、字符串的创建构造

  • 字符串类具有许多可用于创建字符串的构造函数。

常用的四种方式:

  1. string(); 创建一个空字符串,例如:string str;
	string s1;      //默认构造
  1. string(const char* s); :使用字符串 s 初始化
	const char * str = "OilPicture";string s2(str);
  1. string(const string& str); :使用一个 string 对象初始化另一个 string 对象,类似于拷贝构造
	const char * str = "OilPicture";string s2(str);string s3(s2);
  1. string(int n, char c); :使用 n 个字符 c 初始化字符串,最后输出结果为:打印 由10个字符 w 组成的字符串。
	string s4(10,'w');cout << "s4 = " << s4 << endl;

三、string 赋值操作

赋值的函数原型:操作符 operator= 和 成员函数 assign

  • 赋值操作方法:
    在这里插入图片描述
  • 构造代码:
    在这里插入图片描述
  • 结果输出:
    在这里插入图片描述

四、string 字符串拼接

  • 为了实现在字符串末尾拼接字符串。

函数原型:

  • string& operator+=(const char* str);:重载 += 操作符
  • string& operator+=(const char c); :重载 += 操作符
  • string& operator+=(const string& str); :重载 += 操作符
  • string& append(const char *s); :把字符串 s 连接到当前字符串结尾
  • string& append(const char *s, int n); :把字符串 s 的前 n 个字符连接到当前字符串结尾
  • string& append(const string &s); :同 operator+=(const string& str);
  • string& append(const string &s, int pos, int n); :将字符串 s 中从 pos 开始的 n 个字符连接到字符串结尾

  • 定义一个字符串,直接用 += 加上一串字符:
	string str1 = "我";str1 += "爱玩游戏";cout << "str1 = " << str1 << endl;str1 += ":";cout << "str1 = " << str1 << endl;string str2 = "LOL DNF";str1 += str2;cout << "str1 = " << str1 << endl;string str3 = "I";str3.append(" Love");cout << "str3 = " << str3 << endl;str3.append(" gameStory",4);cout << "str3 = " << str3 << endl;str3.append(str2);cout << "str3 = " << str3 << endl;str3.append(str2,0,3);      //只截取到:LOLcout << "str3 = " << str3 << endl;

五、string 查找和替换

  • 查找索引开始的起点从 0 开始,索引失败即没有查找字符的情况下,会返回 -1

查找函数:

  • find :从左往右查找
  • rfind :从右往左查找
	string s1 = "OilPicture";   //从0开始索引,没有情况下,会返回-1//findint pos1 = s1.find("i");		//pos1=1int pos2 = s1.rfind("i");		//pos2=4

替换函数:

  • replace(pos, len, string s); :索引位置从 0 开始。
    在这里插入图片描述
	string str1 = "abcdefg";//从1号位置起 3个字符,替换为 "1111"str1.replace(1,3,"1111");
  • 注: replace 在替换时,要指定从哪个位置起,多少个字符,替换成什么样的字符串。

六、string字符串比较

比较方式:字符串比较是按字符的 ASCII 值进行对比

  • =,返回:0
  • >,返回:1
  • <,返回:-1

函数原型:

  • int compare(const string &s) const; :与字符串 s 比较
  • int compare(const char *s) const; :与字符串 s 比较
	string str1 = "Oil";string str2 = "Oil";if(str1.compare(str2) == 0) {cout << "str1 等于 str2" << endl;}else if(str1.compare(str2) > 0) {cout << "str1 大于 str2" << endl;}else {cout << "str1 小于 str2" << endl;}

七、string 字符的存取

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

  • char& operator[](int n); :通过 [] 方式取字符
  • char& at(int n); :通过 at 方法获取字符

  • 随便定义一个字符串:
	string str = "Hello";
  • 1、通过 [] 访问单个字符。
	for (int i = 0; i < str.size(); ++i) {cout << str[i] << " ";}cout << endl;
  • 2、通过 at 方式访问单个字符。
	for (int i = 0; i < str.size(); ++i) {cout << str.at(i) << " ";}cout << endl;
  • 修改单个字符:以下两种方法都可。
	str[0] = 'W';str.at(1) = 'W';

八、string的插入和删除

函数原型:(开始索引均是从 0 开始)

  • string& insert(int pos, const char* s); :插入字符串
  • string& insert(int pos, const string& str); :插入字符串
  • string insert(int pos, int n, char c); :在指定位置插入 n 个字符 c
  • string& erase(int pos, int n = npos); :删除从 pos 开始的 n 个字符
	string str = "Hello";//插入str.insert(1,"wz");//Hello --> Hwzellocout << "str = " << str << endl;//删除:从第几个位置删除几个元素str.erase(1,2);cout << "str = " << str << endl;
  • 注: 插入和删除的起始下标都是从 0 开始。

九、string 子串

  • 作用: 从字符串中获取想要的子串。
  • 函数原型: string substr(int pos=0, int n=npos) const; :返回由 pos 开始组成的字符串

	string str = "abcdef";string subStr = str.substr(1,3);//subStr --> bcdcout << "subStr = " << subStr << endl;
  • 将原字符串的下标由 13 的子串取出(索引下标从 0 开始)

例:取出邮箱中的用户名

	string email = "oilpicture@sina.com";//从邮箱地址中获取用户名信息int pos = email.find("@");cout << "@符的位置为:" << pos << endl;string usrName = email.substr(0,pos);cout << usrName << endl;
  • @ 符作为分隔符,然后取出由下标 0@ 符位置下标的子字符串,即为邮箱的用户名。

相关内容

热门资讯

读书会的主持词 关于读书会的主持词  主持词分为会议主持词、晚会主持词、活动主持词、婚庆主持词等。在各种集会、活动不...
档案培训班开班仪式主持词   档案管理培训班开班仪式主持词  (请大家安静,我们现在举行培训班开班仪式)  各位领导,各位学员...
学校教师团拜会主持词 学校教师团拜会主持词  主持词是主持人在节目进行过程中用于串联节目的串联词。在现今人们越来越重视活动...
培训开班仪式致辞 培训开班仪式致辞(精选19篇)  无论是在学校还是在社会中,大家肯定对各类致辞都很熟悉吧,致辞是指在...
舞蹈串烧节目主持词 舞蹈串烧节目主持词  舞蹈串烧节目应该怎么进行主持呢?以下是小编整理的舞蹈串烧节目主持词,欢迎参考阅...
元旦节目主持词 2023元旦节目主持词范文(通用16篇)  主持词是主持人在台上表演的灵魂之所在。随着中国在不断地进...
结婚典礼新郎父亲致辞 结婚典礼新郎父亲致辞(精选13篇)  在平平淡淡的学习、工作、生活中,大家对致辞都不陌生吧,致辞具有...
美剧经典台词摘选 美剧经典台词摘选  Men are not prisoners of fate, but priso...
富有诗意的开学典礼的致辞 富有诗意的开学典礼的致辞范文(通用10篇)  在日常的学习、工作、生活中,大家都不可避免地要接触到致...
女方婚礼出阁宴主持词 女方婚礼出阁宴主持词范文(通用9篇)  主持词可以采用和历史文化有关的表述方法去写作以提升活动的文化...
公司春节团拜会主持词 公司春节团拜会主持词  主持词需要富有情感,充满热情,才能有效地吸引到观众。现今社会在不断向前发展,...
灾害急救知识及技能竞赛主持词 灾害急救知识及技能竞赛主持词  主持词要注意活动对象,针对活动对象写相应的主持词。在现在的社会生活中...
赌侠经典的台词 赌侠经典的台词  刘德华,周星驰试图将《赌神》和《赌圣》的名牌发扬光大的作品,这部《赌侠》也是他们早...
小学生开学典礼主持词 小学生开学典礼主持词  主持词需要富有情感,充满热情,才能有效地吸引到观众。在当下的社会中,主持人在...
酒鬼酒著名广告词 酒鬼酒著名广告词发布时间:2017-04-01  1.酒鬼背酒鬼,千斤不嫌赘;酒鬼喝酒鬼,千杯不会醉...
优秀班会主持词 2017年优秀班会主持词  班会是班主任做好班级管理工作的一条有效途径。主持词要怎么说呢?下面是小编...
婚宴主持人词 婚宴主持人词  婚宴开始  尊敬的各位来宾,尊敬的各位亲朋好友,大家晚上好!在这天地之合的喜庆之日,...
电影《爱情公寓》经典台词 电影《爱情公寓》经典台词  1、我们也许是别人故事里的配角,但至少有一个舞台,我们永远都会站在最中央...
摇滚藏獒经典台词 关于摇滚藏獒经典台词  藏獒波弟(Bodi)生长于喜马拉雅山深处一个与世隔绝的世外桃源,本该按家族传...
千与千寻里的经典台词 千与千寻里的经典台词  在日新月异的现代社会中,需要使用台词的情况越来越多,台词起着解释镜头内容和推...