标准库中的String类 String(C++)【3】

news2024/9/29 5:27:04

文章目录

  • String常用的接口(黑框标记的是常用接口)
    • 数据访问
      • `operator`:
      • `at`:
      • `back`:
      • `front`:
    • 数据修改
      • `push_back`:
      • `append`:
      • `operator`:
      • `assigen`:
      • `insert`:
      • `erase`:
      • `replace`:
      • ==注意事项==

String常用的接口(黑框标记的是常用接口)

数据访问

在这里插入图片描述

operator:

返回对字符串中位置为pos的字符的引用

在这里插入图片描述

at:

operator类似但是有细微不同,都是返回对字符串中位置为pos的字符的引用

void TestString1()
{
	string s1("hello world");
	cout << s1[3] << endl;
	cout << s1.at(3) << endl;
}

二者区别
区别主要是在访问越界时候的报错
这是operator的越界报错:
在这里插入图片描述
提示字符串下标出超出范围的断言错误

这是at的越界报错:
在这里插入图片描述
只提示调试错误和调试失败用字样

所以我们日常使用时候用operator的情况居多


在这里插入图片描述

back:

返回对字符串最后一个字符的引用

在这里插入图片描述

front:

返回对字符串第一个字符的引用

这两个了解即可用处不大

void TestString2()
{
	string s1("hello world");
	char lastchar = s1.back();
	char firstchar = s1.front();
	cout << lastchar << endl;
	cout << firstchar << endl;
}

数据修改

在这里插入图片描述

push_back:

将字符c追加到字符串的末尾,使其长度增加1

void TestString3()
{
	string s1("hello world");
	cout << s1 << endl;
	s1.push_back('!');
	cout << s1 << endl;
}

在这里插入图片描述

append:

1.string& append (const string& str);
追加一个str的副本
2.string& append (const string& str, size_t subpos, size_t sublen);
追加一个str的副本。从追加的字符subpos开始,并跨越sublen字符(或者直到str的末尾,如果str太短或者sublen是string::npos)。
3.string& append (const char* s);
在原文本后面添加字符或者字符串
4.string& append (const char* s, size_t n);
在s所指向的字符数组中追加前n个字符的副本
5.string& append (size_t n, char c);
在s所指向的字符数组后面添加n个c字符
6 range
以相同的顺序追加[first,last)范围内字符序列的副本
7.initializer list
以相同的顺序追加il中每个字符的副本

void TestString4()
{
	string s1("hello world");
	string s2("hello string");
	cout << s1 << endl;
	s1.append(s2);
	cout << s1 << endl;
	s1.append(s2,7,6);
	cout << s1 << endl;
	s1.append(" hello string");
	cout << s1 << endl;
	s1.append(5,'!');
	cout << s1 << endl;
	s1.append(++s2.begin(), --s2.end());
	cout << s1 << endl;
}

在这里插入图片描述

operator:

通过在当前值的末尾附加额外的字符来扩展字符串(文字形容抽象,看示例直接解锁最爽插入方式)

void TestString5()
{
	string s1("hello world");
	s1 += ' ';
	s1 += "hello";
	s1 += ' ';
	s1 += "string";
	cout << s1 << endl;
}

在这里插入图片描述
什么实力不用我多说了吧~~~~~


在这里插入图片描述

assigen:

为字符串赋一个新值,替换其当前内容(简单粗暴的覆盖)(种类太多,最基本的使用方法就是示例给出的)

了解即可,不太常用

void TestString6()
{
	string s1("hello world");
	cout << s1 << endl;
	s1.assign("xxxxxxx");
	cout << s1 << endl;
}

在这里插入图片描述

insert:

在字符串中pos(或p)指定的字符前面插入额外的字符(种类太多,最基本的使用方法就是示例给出的)

void TestString7()
{
	string s1("hello world");
	cout << s1 << endl;
	s1.insert(6,"string");
	cout << s1 << endl;
}

在这里插入图片描述

erase:

删除字符串的一部分,减少其长度
1.string& erase (size_t pos = 0, size_t len = npos);
擦除字符串值中从字符位置pos开始并跨越len字符的部分(如果内容太短或len为string::npos,则擦除直到字符串末尾)。注意,默认实参会擦除字符串中的所有字符(类似于成员函数clear)
2.iterator erase (iterator p);
擦除指向p的字符
3. iterator erase (iterator first, iterator last)
擦除[first,last)范围内的字符序列

void TestString8()
{
	string s1("hello world");
	cout << s1 << endl;
	s1.erase(0, 5);
	cout << s1 << endl;
	string s2("hello world");
	cout << s2 << endl;
	s2.erase(s2.begin(),s2.end());
	cout << s2 << endl;
}

在这里插入图片描述

replace:

用新内容替换字符串中从字符pos开始并跨越len字符的部分(或字符串中介于[i1,i2)之间的部分)

坏消息多,好消息用的少,掌握基本用法就行

void TestString9()
{
	string s1("hello world");
	cout << s1 << endl;
	s1.replace(5,1,"100");
	cout << s1 << endl;
}

在这里插入图片描述

  • find:
    在字符串中搜索由其参数指定的序列的第一次出现

在这里插入图片描述

  • npos:
    npos 是一个特殊的常量,它表示字符串中不存在的子串或字符的位置。当你在查找字符串中的子串或字符时,如果找不到,函数会返回 npos

那么我么将npos,findreplace结合起来:

void TestString10()
{
	string s1("h e l l o  w o r l d ");
	size_t pos = s1.find(" ");
	while (pos != string::npos)
	{
		s1.replace(pos,1,"%d");
		pos = s1.find(" ");
	}
	cout << s1 << endl;
}

在这里插入图片描述
实现查找并替换

注意事项

insert,erasereplace能少用就少用,欣慰他们都会挪动数据,效率不高

就比方说上面那个实现查找并替换我们就可以用另一种方式进行编写

void TestString11()
{
	string s1("h e l l o  w o r l d ");
	string s2;

	for (auto ch : s1)
	{
		if (ch != ' ')
		{
			s2 += ch;
		}
		else
		{
			s2 += "%d";
		}
	}
	s1.swap(s2);
	cout << s1 << endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1485680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能物联时代下RFID技术在汽车零部件智能制造中的引领作用

RFID&#xff08;Radio Frequency Identification&#xff0c;射频识别&#xff09;技术在汽车零部件加工中有广泛的应用&#xff0c;其工作原理是通过无线电频率进行自动识别。在汽车零部件加工中&#xff0c;RFID技术可以发挥重要作用&#xff0c;提高生产效率、降低成本和减…

【5G 接口协议】GTP-U协议介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

【虚拟机安装centos7后找不到网卡问题】

最近开始学习linux&#xff0c;看着传智播客的教学视频学习&#xff0c;里面老师用的是centos6.5&#xff0c;我这边装的是centos7最新版的 结果到了网络配置的这一节&#xff0c;卡了我好久。 我在centos一直找不到我的网卡eth0&#xff0c;只有一个回环网口&#xff0c;在/…

集成2.5G/5G/10G高速率网络变压器的RJ45网口连接器产品特点介绍

Hqst华轩盛(石门盈盛)电子导读&#xff1a;集成2.5G/5G/10G高速率网络变压器的RJ45网口连接器产品特点介绍&#xff1a; 第一、 高速率&#xff1a;支持高达2.5Gbps、5Gbps和10Gbps的传输速率&#xff0c;能够满足高带宽的网络应用需求。 第二、 集成2.5G/5G/10G高速率网…

编写dockerfile挂载卷、数据容器卷

编写dockerfile挂载卷 编写dockerfile文件 [rootwq docker-test-volume]# vim dockerfile1 [rootwq docker-test-volume]# cat dockerfile1 FROM centosVOLUME ["volume01","volume02"]CMD echo "------end------" CMD /bin/bash [rootwq dock…

Spring框架相关问题

Spring框架相关问题 一、Spring容器中的Bean是线程安全的吗&#xff1f;二、如何保证Spring容器中的Bean是线程安全的呢&#xff1f;三、什么情况下会触发Spring事务回滚&#xff1f;四、如果事务方法抛出IOException&#xff0c;是否会触发Spring事务回滚&#xff1f;五、什么…

在线简历制作网站免费推荐收藏备用

今天给大家推荐一个很实用的网站&#xff0c;对于要毕业的同学或者说跳槽的朋友比较有作用&#xff0c;对&#xff0c;就是一个免费方便的在线简历制作网站。其实免费的简历制作网站很多&#xff0c;但好用的良心的其实并不多&#xff0c;今天要推荐的这个虽然模板不算多&#…

1.2 在卷积神经网络中,如何计算各层感受野的大小

1.2 在卷积神经网络中&#xff0c;如何计算各层感受野的大小 分析与解答&#xff1a; 在卷积神经网络中&#xff0c;由于卷积的局部连接性&#xff0c;输出特征图上的每个节点的取值&#xff0c;是由卷积核在输入特征图对应位置的局部区域内进行卷积而得到的&#xff0c;因此这…

sql注入之sqli-labs/less-3 单引号加括号闭合

输入单引号试探&#xff1a; id1 报错信息里面出现 ) 说明闭合符合里面还有个 ) 再次试探&#xff1a;id1 ) order by 3 -- 查看回显位置&#xff1a; id-1%20%27)%20union%20select%201,2,3%20-- 查看数据库&#xff1a; id-1%20%27)%20union%20select%201,2,database()%2…

PDF 解析问题调研

说点真实的感受 &#xff1a;网上看啥组件都好&#xff0c;实际测&#xff0c;啥组件都不行。效果好的不开源收费&#xff0c;开源的效果不好。测试下来&#xff0c;发现把组件融合起来&#xff0c;还是能不花钱解决问题的&#xff0c;都是麻烦折腾一些。 这里分享了目前网上能…

幻兽帕鲁专用服务器搭建之Linux部署配置教程

大家好我是飞飞&#xff0c;上一期我分享了Windows系统的幻兽帕鲁服务器搭建教程。因为幻兽帕鲁这游戏对服务器的配置有一定的要求&#xff0c;很多小伙伴就寻思用Linux系统搭建占用会不会小一点&#xff1f;有计算机基础的小伙伴都知道Linux系统和Windows系统相比&#xff0c;…

Git实战(2)

git work flow ------------------------------------------------------- ---------------------------------------------------------------- 场景问题及处理 问题1&#xff1a;最近提交了 a,b,c,d记录&#xff0c;想把b记录删掉其他提交记录保留&#xff1a; git reset …

Hololens 2应用开发系列(2)——MRTK基础知识及配置文件配置(上)

Hololens 2应用开发系列&#xff08;2&#xff09;——MRTK基础知识及配置文件配置 一、前言二、MRTK基础知识2.1 MRTK概述2.2 MRTK运行逻辑2.3 MRTK配置文件介绍2.4 MRTK服务 三、配置文件使用3.1 总配置文件3.2 相机配置3.3 其他配置 参考文献 一、前言 在前面的文章中&…

机器学习中类别不平衡问题的解决方案

类别不平衡问题 解决方案简单方法收集数据调整权重阈值移动 数据层面欠采样过采样采样方法的优劣 算法层面代价敏感集成学习&#xff1a;EasyEnsemble 总结 类别不平衡&#xff08;class-imbalance&#xff09;就是指分类任务中不同类别的训练样例数目差别很大的情况 解决方案…

解决Excel客户端中的Copilot灰色不可用

很多小伙伴已经用上了office套件中的copilot功能 Copilot for Microsoft 365账号介绍与相关问题的解答 Copilot for Microsoft 365账号登录指南 Copilot for Microsoft 365功能使用指南 问题发现 大部分人使用的都是Word和PowerPoint功能&#xff0c;但是也有部分小伙伴使…

Vue项目的快速搭建

Vue项目的快速搭建 一、下载并安装node.js二、安装Vue脚手架三、创建vue项目四、项目启动五、VS Code下载安装 一、下载并安装node.js 首先确保已经安装了Node.js。如果没有安装&#xff0c;可以去官网&#xff08;https://nodejs.org/&#xff09;下载并安装最新版本的Node.j…

第16章-DNS

目录 1. 域名 1.1 产生背景 1.2 概述 1.3 域名的树形层次化结构 2. DNS 2.1 概述 2.2 工作机制 3. DNS查询模式 3.1 递归查询&#xff1a; 3.2 迭代查询&#xff1a; 4. 相关知识点 4.1 集中式DNS 4.2 国内通用DNS 4.3 配置DNS代理 1. 域名 1.1 产生背景 ① IP…

rhcsa(rh134)

shell 查看用户shell a、如下查看/etc/shells文件列出了系统上所有可用的 shell&#xff08;具体的可用的 shell 列表可能会因不同的红帽版本和配置而有所不同&#xff09; &#xff08;如下图/etc/shells文件包含/bin/tmux并不意味着tmux是一个shell。实际上&#xff0c;/etc/…

通过多进程并发方式(fork)实现服务器(注意要回收子进程)

以下内容为视频学习记录。 1、父进程accept后返回的文件描述符为cfd以及用于创建连接的lfd; 调用fork()创建子进程后&#xff0c;子进程继承cfd,lfd&#xff0c;通过该cfd与连接过来的客户端通信,lfd对子进程来说没用&#xff0c;可以直接close(lfd); 对于父进程来说&#x…

web基础03-JavaScript

目录 一、JavaScript基础 1.变量 2.输出 3.变量提升 4.区块 5.JavaScript数据类型 6.查看数值类型 7.undefined和null 8.布尔值 9.和的区别 10.算数/三元/比较/逻辑/赋值运算符 11.特殊字符 12.字符串 &#xff08;1&#xff09;获取字符串长度 &#xff08;2&am…