c++系列之string类的常用接口函数

news2024/9/17 7:22:06

在这里插入图片描述

💗 💗 博客:小怡同学
💗 💗 个人简介:编程小萌新
💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞

string

string时表示字符串的字符类
//使用 string类包含#include 头文件 以及 using namespace std

string类的常见构造

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

int main()
{
	string s;//string()
	string s1("hello world");//string(const char* s)
	string s2(s1);//string(const string& s)
	cout << s << endl;
	cout << s1 << endl;
	cout << s2 << endl;
	return 0;
}

string

string容量相关接口 (size(),capacity(),clear(),empty)

1.size()是元素个数
//. size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下基本都是用size()。
2.capacity()是容积
3.clear()将字符串清空,但不改变底层空间大小 //clear()只是将string中有效字符清空,不改变底层空间大小。
4.empty()检测字符串是否为空是返回true ,否则返回false

resize()接口函数

resize(size_t n) 与 resize(size_t n, char
c)都是将字符串中有效字符个数改变到n个,不同的是当字符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char
c)用字符c来填充多出的元素空间。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。

int main()
{
	
	string s1("hello world");
	
	cout << s1.size() <<endl;
	cout << s1.capacity() << endl;
	s1.resize(34,'y');// 将s1中有效字符个数增加到34个,多出位置用'y'进行填充
	s1.resize(13);
	cout << s1.size() << endl;
	cout << s1.capacity() << endl;
	cout << s1 << endl;

	s1.resize(3, 'y');
	cout << s1.size() << endl;
	cout << s1.capacity() << endl;
	cout << s1 << endl;
	return 0;
}

在这里插入图片描述

reserve()

//reserve(size_t res_arg=0)
为string预留空间,不改变有效元素个数,当reserve的参数小于string的底层空间总大小时,reserver不会改变容量大小。

在这里插入图片描述
在这里插入图片描述

string类对象的访问及遍历操作

//operator[]
//迭代器->begin(),end() / rbegin() ,rend()
//for

1.operator[]
在这里插入图片描述
2.迭代器

int main()
{
	
	string s1("hello world");
	
	string::iterator vit = s1.begin();
	while (vit != s1.end())
	{
		cout << *vit ;
		vit++;
	}
	cout << "  " << endl;

	string::reverse_iterator it = s1.rbegin();
	while (it != s1.rend())
	{
		cout << *it;
		it++;
	}
	return 0;
}

在这里插入图片描述
3.范围for

int main()
{
	
	string s1("hello world");
	
	for (auto tmp: s1)//tmp只是原数组拷贝 不改变原数就改成引用会改变
	{
		cout << ++tmp;
	}
	cout << " " << endl;
	for (auto& tmp : s1)
	{
		cout << ++tmp ;
	}
	return 0;
}

在这里插入图片描述
在这里插入图片描述

string类对象的修改和操作

插入(拼接)方式

push_back() //加字符
append()//加字符串
operator()//加字符或字符串都行

int main()
{
	
	string s1("hello world");
	s1.push_back('a');
	s1.append("asddfs");
	s1 += 'a';
	s1 += "sfasd";
	cout << s1;
	return 0;
}

正向和反向查找:find() + rfind()

int main()
{
	
	string s1("hello.world");
	int pos1 = s1.find('.');
	string s ("string.cpp");
	int pos = s.rfind('.');
	string s2("aahello.world");
	int pos = s2.find(s1);//查找字符串
	//返回下标
	
	string s1("hello.worl.d");
	int pos = s1.find('.',6 );
	//第一个参数是要找的字符、字符串,第二个参数是从下标n开始查找
	cout << pos;
	return 0;


	// npos是string里面的一个静态成员变量
	// static const size_t npos = -1;
	//如果未找到匹配项,则该函数返回string::npos。
}

截取子串:substr()

string substr (size_t pos = 0, size_t len = npos) const

int main()
{
	
	string s1("hello.world");
	int pos1 = s1.find('.');
	string s2("aahello.world");
	string s3( s1.substr(1, 5));
	cout << s3 << endl;
	//从下标pos ,截取n个
	return 0;
	//返回字符串对象

}

在这里插入图片描述

getline()

//非字符类的接口函数

istream& getline (istream& is, string& str)

int main()
{
	
	string s1;
	getline(cin,s1);
	cout << s1 << endl;
	return 0;
}

reverse用法

//非string接口函数,常用于字符串反转 void reverse (BidirectionalIterator first,BidirectionalIterator last); 参数是迭代器 (左闭右开)

#include <iostream>
#include <string>
using namespace std;
    int main()
    {
        string s ("race a car");
        reverse(s.begin(), s.end());
        cout << s << endl;
        return 0;
    }

//begin()是字符串第一个字符
//end()是字符串最后一个字符的下一位
//rbegin()是最后一个元素
//rend()是第一个元素

在这里插入图片描述

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

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

相关文章

基于Java人事管理信息系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

fast admin 使用百度富文本编辑器添加赋值

这篇文章为大家介绍一下fastadmin框架如何引入并使用百度富文本 文章目录 前言下载文件编辑文件配置上传图片添加代码总结 前言 在学习fastadmin的时候需要使用到富文本编辑器&#xff0c;于是查阅了一下资料&#xff0c;实现后将我的经验分享给大家 一、下载文件并放入自己的…

es6的模块化 import()方法进行动态加载模块

import 语句和import()方法是不一样的 import 语句是在编译的时候起作用&#xff0c;if&#xff08;&#xff09;{import 语句} 这句话在编译的时候不会执行if语句&#xff0c;会报错 import 语句无法在运行时加载模块&#xff0c;在语法上&#xff0c;按条件加载模块是不行…

Andriod开发 fragment

1.fragment fragment是一个可以嵌入到Activity中的可重用UI组件。它可以让你在一个Activity中展示多个界面&#xff0c;并且可以在运行时动态地添加、移除、替换和组合不同的fragment&#xff0c;从而实现复杂的UI交互效果。 与Activity类似&#xff0c;Fragment也有自己的生…

Linux监控Raid磁盘健康状态

Raid卡型号与操作 Raid卡市场主要是LSI、Adaptec、Highpoint、Promise等厂商提供。Adaptac被PMC收购后&#xff0c;提供的Raid卡即为PMC,简称为P卡。LSI公司提供的Raid卡&#xff0c;即为L卡。 Raid卡配置操作方式 Raid配置可以通过BIOS启动后进入Raid的配置页面进行配置&#…

【Proteus仿真】74HC192功能验证

前言 74HC192是一种四位可向上或向下计数的计数器芯片&#xff0c;可用于电子设备中的计数器、定时器和频率计等应用。74HC192的模式可以分为4种&#xff0c;向上计数&#xff0c;向下计数&#xff0c;并行输入&#xff0c;重置。还有就是&#xff0c;仿真中一些引脚的名称可能…

【硬件】嵌入式电子设计基础之单片机

本篇文章介绍了基于单片机平台开发的一些基本理论知识&#xff0c;包括了硬件最小系统的说明以及基于单片机开发的过程。文中还额外介绍了ARM体系架构&#xff0c;帮助读者从更深层次去熟悉我们平常最容易接触的开发平台&#xff0c;熟悉这些寄存器定义和处理器模式能够帮助我们…

为什么说网络安全是IT行业最后的红利?

前言 “没有网络安全就没有国家安全”。当前&#xff0c;网络安全已被提升到国家战略的高度&#xff0c;成为影响国家安全、社会稳定至关重要的因素之一。 网络安全行业特点 1、就业薪资非常高&#xff0c;涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万…

Python实现京东茅台抢购脚本, 原来这么简单

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 开发环境: python 3.8 运行代码 pycharm 2022.3.2 辅助敲代码 专业版 京东茅台抢购脚本可以分为以下几部分&#xff0c;具体实现步骤如下&#xff1a; 1. 登录京东账号 首先需要登录京东账号。 一个简单的方式是使用Pyth…

Linux 读书笔记之《鸟哥的 Linux 私房菜 基础学习篇(第四版)》

文章目录 鸟哥 Linux 私房菜&#xff08;基础学习篇&#xff09;第零章、计算器概论第一章、Linux 是什么与如何学习第二章、主机规划与磁盘分区第四章、首次登入与在线求助第五章、Linux 的文件权限与目录配置第六章、Linux 文件与目录管理第七章、Linux 磁盘与文件系统管理第…

springCloudAlibaba组件-Nacos-服务发现与负载均衡(三)

文章目录 服务发现概述服务发现两种形式nacos的负载均衡机制 服务发现概述 如果项目使用微服务架构&#xff0c;如果A微服务需要访问B微服务&#xff0c;需要http请求进行调用&#xff0c;当然需要B微服务的地址与端口号&#xff0c;微服务可以向之前提到的服务中心进行获取B服…

U盘无法格式化?快速解决方法大揭秘!

简介&#xff1a;本文将介绍如何解决U盘无法格式化的问题&#xff0c;并提供快速解决方法。无法格式化的U盘可能会导致数据无法读取或写入&#xff0c;因此解决这个问题具有重要价值。 工具原料&#xff1a; 电脑品牌型号&#xff1a;Lenovo ThinkPad T480 操作系统版本&…

开源代码分享(4)—考虑自动重合闸与DG的配电网可靠性评估(附matlab代码)

摘要&#xff1a;电力系统的可靠性是现代电力系统规划、设计和运行中的一个关键方面。智能电网概念的崛起为开发一个能够成为自愈电网的智能网络带来了很高的希望&#xff0c;提供了克服效用面临的中断问题的能力&#xff0c;并花费了数千万美元的维修和损失。在这项工作中&…

【C语言】C语言从入门到精通第1章C语言概述

目录 一、C语言发展史 &#xff08;一&#xff09;程序语言简述 1、机器语言 2、汇编语言 3、高级语言 &#xff08;二&#xff09;C语言的历史 二、C语言的特点 &#xff08;一&#xff09;高效性 &#xff08;二&#xff09;灵活性 &#xff08;三&#xff09;功能丰…

常用的几种图像置乱算法

图像置乱算法是一种用于保护图像信息安全的技术&#xff0c;它可以将原始的图像信息进行加密和混淆&#xff0c;使得未经授权的用户无法获取到原始的图像信息。在信息安全领域中&#xff0c;图像置乱技术被广泛应用于图像加密、数字水印、安全传输等方面。下面是几种常用的图像…

English Learning - L3 作业打卡 Lesson6 Day39 2023.6.12 周一

English Learning - L3 作业打卡 Lesson6 Day39 2023.6.12 周一 引言&#x1f349;句1: A Festival for the Dead is held once a year in Japan.成分划分弱读连读语调 &#x1f349;句2: This festival is a cheerful occasion.成分划分弱读连读语调 &#x1f349;句3: For on…

腾讯太狠:40亿QQ号, 给你1G内存,怎么去重?

说在前面 在40岁老架构师 尼恩的读者社区(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如腾讯、美团、阿里、拼多多、极兔、有赞、希音的面试资格&#xff0c;遇到一几个很重要的面试题&#xff1a; 40亿Q号如何设计算法去重&#xff0c;相同的Q号码仅保留一个&#x…

在 Quarkus 中的使用 Mutiny 进行响应式编程

在 Quarkus 中使用 Mutiny - 事件驱动的 Java 响应式编程库 本教程介绍在 Quarkus 中使用事件驱动的 Mutiny 响应式编程库 以应对异步系统开发中的挑战。 概述 Mutiny 是一个&#xff08;Reactive Programming&#xff09;响应式编程库, 事件是 Mutiny 的设计核心&#xff0…

1.3 springboot项目中,数据层HikariCP与MyBatis整合

步骤1&#xff1a;在顶级父工程中pom引入mysql和mybatis依赖 <!-- mysql驱动 --> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.41</version> </dependency> <…

微信公众号每天定时发送消息给女朋友

前言 这是我在这个网站整理的笔记&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;RodmaChen 每天定时发送消息给女朋友 一. 环境准备二. 代码拉取和配置三. 项目部署3.1 直接运行3.2 后台运行 四. 效果图 参考地址&#xff1a;https://github.com/limoes…