算法竞赛字符串篇之C++中string的成员函数

news2024/10/6 22:18:55

2023年5月7日,周日中午:

今天决定从字符串这个知识点开始学起,记录一下我今天的字符串学习。

不定期更新。


相关的英文文档:

https://cplusplus.com/reference/string/string/


容量方面的成员函数:

empty:检测字符串是否为空。

#include<string>
#include<iostream>
using namespace std;

int main(){
	string str1="helleo";
	string str2="";
	cout<<"str1是否为空"<<str1.empty()<<endl;
	cout<<"str2是否为空"<<str2.empty()<<endl;
}

clear:清空字符串的内容。

#include<string>
#include<iostream>
using namespace std;

int main(){
	string str1="helleo";
	cout<<"str1清空前"<<str1<<endl;
	str1.clear();
	cout<<"str1清空后"<<str1<<endl;
}

size、length:返回字符串所含字符数。

#include<string>
#include<iostream>
using namespace std;

int main(){
	string str="nihao";
	cout<<"the size of str:"<<str.size()<<endl;
	cout<<"the length of str:"<<str.length()<<endl;
}

capacity:返回字符串所申请的内存空间的大小。

注意:默认申请的是15个内存空间的大小

#include<string>
#include<iostream>
using namespace std;

int main(){
	string str;
	cout<<str.capacity()<<endl;
}

restore:改变字符串的内存空间大小

假设:restore(n)

如果n比当前的字符串的内存空间大小要大,那么restore会让字符串的内存空间变成n,或者变得比n更大

#include<string>
#include<iostream>
using namespace std;

int main(){
	string str;
	string str2;
	cout<<"str的默认内存空间大小:"<<str.capacity()<<endl;
	cout<<"str2的默认内存空间大小:"<<str2.capacity()<<endl;
	str.reserve(20);
	cout<<"str.reserve(20)后的内存空间大小:"<<str.capacity()<<endl;
	str2.reserve(40);
	cout<<"str2.reserve(40)后的内存空间大小:"<<str2.capacity()<<endl;
}


修改方面的成员函数:

push_back:在字符串的末尾增加一个字符

#include<string>
#include<iostream>
using namespace std;

int main(){
	string str;
	str.push_back('a');
	str.push_back('b');
	str.push_back('c');
	cout<<str<<endl;
}

pop_back:删除字符串末尾的一个元素

#include<string>
#include<iostream>
using namespace std;

int main(){
	string str;
	str.push_back('a');
	str.push_back('b');
	str.push_back('c');
	cout<<str<<endl;
	
	str.pop_back();
	cout<<str<<endl;
}

swap:换成指定的字符串

#include<string>
#include<iostream>
using namespace std;

int main(){
	string str="apple";
	string str2="idea";
	str.swap(str2);
	cout<<str<<endl;
}


元素获取方面的成员函数:

back:获取字符串的最后一个元素

#include<string>
#include<iostream>
using namespace std;

int main(){
	string str="apple";
	cout<<str.back()<<endl;
}

front:获取字符串的第一个元素

#include<string>
#include<iostream>
using namespace std;

int main(){
	string str="apple";
	cout<<str.front()<<endl;
}


字符串操作方面的成员函数:

find_first_of:在字符串中查找第一个匹配指定字符集中字符的字符,并返回其位置。

它有四种形式:

如果你设置了pos,那么只会从pos之后开始找

 如果查找成功,那么会返回字符在字符串中的位置

如果查找失败,那么会返回string::npos

string::npos是string类中的一个静态成员常量,其值为-1

#include <iostream>
#include <string>
using namespace std;

int main(){
	string str="12a34b567";
	cout<<"字符串中首次出现字母a或b的位置是:"<<str.find_first_of("ab");
}
#include <iostream>
#include <string>
using namespace std;

int main(){
	string str="12a34b5c6de7f";
	cout<<str<<endl;
	int index=str.find_first_of("123456789");
	while(index!=string::npos){
		str[index]='@';
		index=str.find_first_of("123456789",index+1);
	}
	cout<<"把str中的数字都变成@:"<<str<<endl;
	
}

find_first_not_of:在字符串中查找第一个不匹配指定字符集中字符的字符,并返回其位置。

用这个可以判断用户输入的密码是否合规定,比如我规定密码只能含大小写字母和数字

#include <string>
#include <iostream>
using namespace std;

int main(){
	string password="123abc@822742";
	int index=password.find_first_not_of("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789");
	if(index!=string::npos){
		cout<<"密码不合规!"<<endl;
	}
}


不是string的成员函数,但是是它们的重载的函数

std::swap:交换两个string的值

#include <string>
#include <iostream>
using namespace std;

int main(){
	string xiaoming="apple";
	string xiaojun="banana";
	cout<<"交换前:"<<endl;
	cout<<"小明:"<<xiaoming<<endl;
	cout<<"小军:"<<xiaojun<<endl;
	swap(xiaoming,xiaojun);
	cout<<"交换后:"<<endl;
	cout<<"小明:"<<xiaoming<<endl;
	cout<<"小军:"<<xiaojun<<endl;
}

std::getline:从数据流中读取一行数据到string中

std::cin和std::getline有什么区别?

cin 和 getline() 主要的区别是,cin 以空格为分隔符,而 getline() 以换行符为分隔符。如果你需要获取包含空格的整行或段落文字,使用 getline() 更为合适。否则,使用 cin 可以更方便地直接将数据存入变量中。

#include <string>
#include <iostream>
using namespace std;

int main(){
	string str1;
	string str2;
	string temp;
	
	cin>>str1;
	cout<<"str1:"<<str1<<endl;
	getline(cin,temp);
	getline(cin,str2);
	cout<<"str2:"<<str2<<endl;
}

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

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

相关文章

基于AT89C51单片机的电子闹钟设计与仿真

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87761718?spm=1001.2014.3001.5503 源码获取 主要内容: 基于51单片机设计一个电子闹钟,至少具有以下功能:时间的设定、时间的调整、闹钟的设定、温度的设定。 基本要求:…

排队论_M/M/1/inf/inf 问题

例:某修理店只有一一个修理工人&#xff0c;来修理的顾客到达数服从泊松分布&#xff0c;平均每小时4人;修理时间服从负指数分布&#xff0c;平均需6分钟。求: (1)修理店空闲的概率; (2)店内有3个顾客的概率; (3)店内至少有1个顾客的概率; (4)店内顾客的平均数; (5)顾客在店内的…

显著性检测:从传统方法到深度学习网络的演进与挑战

显著性检测技术在计算机视觉领域中扮演着至关重要的角色&#xff0c;它是一项对图像中最显著或最有区别的视觉特征进行分析和提取的技术。显著性检测技术可以为计算机视觉任务提供帮助&#xff0c;例如图像分割、目标检测、场景理解、图像检索和人机交互等方面。 本文将从传统方…

【MySQL】基于规则的优化(内含子查询优化;派生表;物化表;半连接;标量子查询;行子查询)

概念 常量表&#xff1a;下述两种查询方式查询的表&#xff1a; 类型1&#xff1a;查询的表中一条记录都没有&#xff0c;或者只有一条记录。 类型2&#xff1a;使用主键等值匹配或者唯一二级索引列等值匹配作为搜索条件来查询某个表 派生表&#xff1a;放在FROM子句后面的子…

UDP报头、TCP报头、IP报头、MAC头部、ARP头部

前言&#xff1a;DUP报头、TCP报头、IP报头、MAC头部、ARP头部。 UDP报头&#xff1a; UDP报头由八个字节组成&#xff0c;每个字段都是两个字节 &#xff1a; 1.源端口号&#xff1a;发送方端口号&#xff0c;需要对方回信的时候选用&#xff0c;不需要对方回信的时候置0 …

[LeetCode复盘] LCCUP‘23春季赛组队赛 20230507

[LeetCode复盘] LCCUP23春季赛组队赛 20230507 一、本周周赛总结1. 符文储备1. 题目描述2. 思路分析3. 代码实现 2. 城墙防线1. 题目描述2. 思路分析3. 代码实现 3. 提取咒文1. 题目描述2. 思路分析3. 代码实现 4. 生物进化录1. 题目描述2. 思路分析3. 代码实现 5. 与非的谜题…

HNU-操作系统OS-实验Lab3

OS_Lab3_Experimental report 湖南大学信息科学与工程学院 计科 210X wolf &#xff08;学号 202108010XXX&#xff09; 实验目的 了解虚拟内存的Page Fault异常处理实现了解页替换算法在操作系统中的实现 实验内容 本次实验是在lab2的基础上&#xff0c;借助于页表机制…

【python数据分析】运算符与表达式

&#x1f64b;‍ 哈喽大家好&#xff0c;本次是python数据分析、挖掘与可视化专栏第三期 ⭐本期内容&#xff1a;运算符与表达式 &#x1f3c6;系列专栏&#xff1a;Python数据分析、挖掘与可视化 &#x1f44d;保持开心&#xff0c;拒绝拖延&#xff0c;你想要的都会有&#x…

车载软件架构——闲聊几句AUTOSAR BSW(四)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 我们并不必要为了和谐,而时刻保持通情达理;我们需要具备的是,偶尔有肚量欣然承认在某些方面我们可能会有些不可理喻。该有主见的时候能掷地有声地镇得住场…

iOS 对https App内部的http请求进行白名单设置

苹果从iOS9开始要求应用使用Https链接来对请求进行加密,来保证数据的安全.如果使用http请求将会报错,当然,如果你想继续使用http请求,有两种方式: 1.使用ASIHttpRequest来请求,ASI是使用CFNetwork来处理请求的,更底层些,避开了苹果的限制 2.在Info.plist文件设置如下 <key…

Docker安装常用软件-Apollo(有问题)

零&#xff1a;apollo概念介绍 官网网站&#xff1a;GitHub - apolloconfig/apollo: Apollo is a reliable configuration management system suitable for microservice configuration management scenarios. gitee网址&#xff1a;mirrors / ctripcorp / apollo GitCode …

自学软件测试简历没项目写怎么办?

目录 一、引言 二、测试任务 三、测试进度 四、测试资源 五、测试策略 六、测试完成标准 七、风险和约束 八、问题严重程度描述和响应时间规范 九、测试的主要角色和职责 软件测试是使用人工或者自动的手段来运行或者测定某个软件系统的过程&#xff0c;其目的在于检验…

Python:Python进阶:Python字符串驻留技术

Python字符串驻留技术 1.什么是字符串驻留2. 为什么要驻留字符串3. Python的字符串驻留4. Python 字符驻留原理4.1 如何驻留字符串4.2 如何清理驻留的字符串 5. 字符串驻留的实现5.1. 变量、常量与函数名5.2 字典的键5.3 任何对象的属性5.4 显式地驻留 6 字符串驻留的其他发现 …

MySQL --- DML

接下来学习第二个部分&#xff1a;根据页面原型以及需求进行相关功能的开发&#xff0c;进而完成数据库的操作。 学习数据库的DML操作 3. 数据库操作-DML-insert&#xff0c;update,delete DML DML英文全称是Data Manipulation Language(数据操作语言)&#xff0c;用来对数据…

176_工具_Power BI 实用工具 pbi-utils 更新至 v1.0.3.1

176_工具_Power BI 实用工具 pbi-utils 更新至 v1.0.3.1 pbi-utils 更新至&#xff1a;v1.0.3.1, 从 v1.0.0.0 到 v1.0.3.1 更新了 8 次。 文档地址&#xff1a;https://jiaopengzi.com/2880.html 主要功能&#xff1a; 快速设置 Power BI 模板&#xff0c;实现高复用。设计…

【大数据基础】Spark+Kafka构建实时分析Dashboard

https://dblab.xmu.edu.cn/post/spark-kafka-dashboard/ https://dblab.xmu.edu.cn/post/8116/ 实验环境准备 Kafka安装 访问Kafka官方下载页面,下载稳定版本0.10.1.0的kafka.此安装包内已经附带zookeeper,不需要额外安装zookeeper.按顺序执行如下步骤: cd ~/下载 sudo tar …

《Markdown编辑器》的使用

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

Simulink 自动代码生成电机控制:方波高频注入仿真到代码生成开发板演示

目录 前言 方波高频注入仿真 生成代码开发板运行 总结 前言 最近换了一个小电机&#xff0c;于是尝试了一下方波高频注入的仿真到代码生成的实验&#xff0c;正弦波注入的方式已经实现 STM32 Simulink 自动代码生成电机控制——脉振高频注入_高频注入代码_卡洛斯伊的博客-…

【Linux】进程信号(下)

文章目录 1.信号处理相关问题内核态与用户态概念的理解为什么要有 用户态和内核态CR3寄存器的使用信号处理的整体过程 1.信号处理相关问题 信号处理&#xff0c;不是可以立即处理的&#xff0c;而是在合适的时候 不懂点击: 信号的产生第三点 什么时候是合适的时候&#xff1f;…

Android Studio下载及安装和Gradle的配置

文章目录 下载安装双击打开exe文件 修改Sdk的位置创建项目修改Gradle的位置 下载 下载地址&#xff1a;官方下载地址 打开后往下拉&#xff0c;直到最后的I agree to the terms. 这里选择的android studio版本是&#xff1a;2021.2.1.16&#xff0c;也可以根据自己的需要下载…