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

C++ String(1)

String的头文件是#include  <string>

String本质上是一个类,是C++实现好的一个类

初学只用学重要的部分,不可能一次性全部学完

1.构造函数


我们先来看它的几个构造函数

首先(1)就是无参的构造

(2)是对str的字符串进行拷贝(拷贝构造)

(4)常量字符串初始化

(6)拷贝n个字符c进行初始化

上面几个是最常用的

下面几个可以了解一下

(5)就是拷贝s字符串的前n个字符进行初始化

(3)从字符串str的pos位置开始的len长度的部分拷贝

这个地方len还有一个缺省值npos,代表size_t的最大值,可以理解成,如果你不给参数,它会读到字符串读完

 2.其他函数

operator <<和operator>>

string可以直接进行流插入和流提取,因为这个地方对流插入操作符和流提取操作符进行重载了!

compare()

同样的string也可以直接比较大小,比较方式和C语言的strcmp,但是效率比strcmp高,原因是string类里有compare的字符串大小比较的函数

operator=

同样的,我们对于赋值操作符,string也替我们封装好了

下面是几种常用的赋值

int main(void) {string s1;string s2;s1 = "abc";//(2)s2 ='a';//(3)s1 = s2;//(1)return 0;
}

push_back

 那么我们如果要在字符串后面插入怎么办?

string也给我们提供能直接使用的函数

插入一个字符

append()

那如果插入字符串呢?

 

int main(void) {string s1;string s2;string s3;s3 = "asas";s1 = "abc";s2 ='a';s1.push_back('a');s1.append(s3);return 0;
}

operator+=

当然这两个函数比C语言的函数好的地方在于它会自动扩容,但是如果你觉得这两个函数还是复杂了,有一个更简单的方法,直接+=就可以了

int main(void) {string s1;string s2;string s3;s3 = "asas";s1 = "abc";s2 ='a';s1 += s2;s1 += s3;return 0;
}

 这个地方+=本质上和上面两个函数是相同的,只不过我们根据+=类型不同,我们operator+=去调用不同的函数,比如push_back和append

operator []

那么如果我们要遍历字符串怎么办呢?我们可以用operator []

 []符号本质上是对数组进行简引用,当然这个函数操作对象的值是可修改的

如果要遍历字符串,那我们怎么知道这个字符串多长呢?

size()

这个时候我们就可以用size函数了,这个size函数的大小是不算字符串最后的\0的和strlen一样

当然length也是一样的,但是size用的更多,推荐使用size

因此我们就可以去遍历打印字符串了

int main(void) {string s1;s1 = "asas";for (int i = 0;i < s1.size();i++){cout << s1[i] << endl;}return 0;
}

 数组的[]和string的[]底层是不一样的!

int main(void) {string s1;s1 = "asas";char a[3] = {"ab"};a[1];//本质上是*(a+1)s1[1];//本质上是s1.operator[](1)return 0;
}

capacity()

capacity表示的是容量,我们容量不足的时候就会自动扩容,不同编译器下扩容倍数不同

max_size()

max_size返回字符串能达到的最大值,但是这个值在不同编译器结果不一样,实际毫无意义

clear()

clear表示清理数据,clear会改变size的大小,但是不会改变capacity的大小!有析构函数做最后的保底

empty()

empty判断是否为空

 

3.迭代器

	string::iterator it = s1.begin();while (it != s1.end()){cout << *it <<"  ";++it;
}

1.普通顺序迭代器 interator

迭代器包含it begin end

it是当前指向的位置(初始位置为begin)

begin是指向第一个元素

end是指向最后一个元素

但是begin 和end 以及it都是左闭右开
迭代器是像指针一样的类型,可能是指针,可能不是指针!

string平时迭代器用的不多

那么迭代器有哪些优势呢?

2.迭代器的优点

1.范围for的底层是迭代器

不支持迭代器的就不支持范围for

比如说栈,因为要求先进先出,所以不支持迭代器,也不支持范围for

2.任何容器都支持迭代器,且用法相似,迭代器会和容器配合

3.反向迭代器  reverse_iterator

rebegin指向最后一个元素

rend指向第一个元素

rit指向当前位置,(初始位置为最后一个元素)

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

当然这个地方用auto也很爽()包括上面的正序也可以

	auto it = s1.rbegin();while (it != s1.rend()){cout << *it << "  ";++it;}

4.const顺序迭代器和const逆序迭代器

对于const对象,我们不能用普通迭代器,就要用const迭代器

同样逆置也有它的const迭代器

void aaa(const string& s1)
{string::const_iterator it = s1.begin();//或者auto it=s1.begin();while (it != s1.end()){cout << *it << "  ";++it;}auto ot=s1.rbegin();//或者string::const_reverse_iterator ot = s1.rbegin();while (ot!=s1.rend()){cout << *ot << "  ";++ot;}
}
int main(void) {string s1 = "asas";aaa(s1);return 0;
}

相关文章:

C++ String(1)

String的头文件是#include <string> String本质上是一个类&#xff0c;是C实现好的一个类 初学只用学重要的部分&#xff0c;不可能一次性全部学完 1.构造函数 我们先来看它的几个构造函数 首先&#xff08;1&#xff09;就是无参的构造 &#xff08;2&#xff09;是…...

ts 中 ReturnType 作用

ReturnType 用于获取函数的返回值类型。 一、基本概念和语法 1. 定义和语法结构 ReturnType是一个泛型类型&#xff0c;其语法为ReturnType<T>&#xff0c;其中T是一个函数类型。例如&#xff0c;如果有一个函数add&#xff0c;ReturnType<typeof add>就可以获取…...

Hadoop + Hive + Apache Ranger 源码编译记录

背景介绍 由于 CDH&#xff08;Clouderas Distribution Hadoop &#xff09;近几年已经开始收费并限制节点数量和版本升级&#xff0c;最近使用开源的 hadoop 搭了一套测试集群&#xff0c;其中的权限管理组件用到了Apache Ranger&#xff0c;所以记录一下编译打包过程。 组件…...

Java从入门到精通笔记篇(十二)

枚举类型与泛型 枚举类型可以取代以往常量的定义方式&#xff0c;即将常量封装在类或接口中 使用枚举类型设置常量 关键字为enum 枚举类型的常用方法 values()方法 枚举类型实例包含一个values()方法&#xff0c;该方法将枚举中所有的枚举值以数组的形式返回。 valueOf()可…...

入侵排查之Linux

目录 1.黑客入侵后的利用思路 2.入侵排查思路 2.1.账号安全 2.1.1.用户信息文件/etc/passwd 2.1.2.影子文件/etc/shadow 2.1.3.入侵排查 2.1.3.1.排查当前系统登录信息 2.1.4.2.查询可以远程登录的账号信息 2.2.历史命令 2.2.1.基本使用 2.2.1.1.root历史命令 2.2.…...

从0开始学习Linux——文件管理

往期目录&#xff1a; 从0开始学习Linux——简介&安装 从0开始学习Linux——搭建属于自己的Linux虚拟机 从0开始学习Linux——文本编辑器 从0开始学习Linux——Yum工具 从0开始学习Linux——远程连接工具 从0开始学习Linux——文件目录 从0开始学习Linux——网络配置 从0开…...

全面介绍软件安全测试分类,安全测试方法、安全防护技术、安全测试流程

一、软件系统设计开发运行安全 1、注重OpenSource组件安全检查和版本更新&#xff08;black duck&#xff09; 现在很多云、云服务器都是由开源的组件去搭成的&#xff0c;对于OpenSource组件应该去做一些安全检查和版本更新&#xff0c;尤其是版本管理&#xff0c;定期对在运…...

Leidenアルゴリズムの詳細解説:Pythonによるネットワーク分割の実装

Leidenアルゴリズムの詳細解説&#xff1a;Pythonによるネットワーク分割の実装 目次1. Leidenアルゴリズムの概要2. Python実装例3. グループ分けの結果分析4. なぜこのような分割になるのか5. Leidenアルゴリズムの仕組み6. 実践的な応用例7. 初心者へのアドバイス8. まとめ …...

安当ASP系统:适合中小企业的轻量级Radius认证服务器

安当ASP&#xff08;Authentication Service Platform&#xff09;身份认证系统是一款功能强大的身份认证服务平台&#xff0c;特别适用于中小企业。其中&#xff0c;简约型Radius认证服务器是安当ASP系统中的一个重要组成部分。以下是对该系统的详细介绍&#xff1a; 一、主要…...

Vue 组件间传值指南:Vue 组件通信的七种方法

前言 Vue 的组件系统非常强大&#xff0c;允许我们将应用程序拆分成独立且可复用的组件。随着前端开发的复杂性增加&#xff0c;组件间的数据传递和状态管理显得尤为重要。本文将详细介绍几种在 Vue 中常用的组件间传值方法&#xff0c;并结合实际代码示例&#xff0c;帮助您更…...

推荐一个超漂亮ui的网页应用设计

https://andi.cn/download/65211.html...

有什么初学算法的书籍推荐?

对于初学算法的读者&#xff0c;以下是一些值得推荐的书籍&#xff1a; 1、算法超简单&#xff1a;趣味游戏带你轻松入门与实践 作者&#xff1a;童晶 著 推荐理由&#xff1a;本书把趣味游戏应用于算法教学&#xff0c;提升读者的学习兴趣&#xff0c;并通过可视化的图解和动…...

自动化工作流建设指南

&#x1f680; 自动化工作流建设指南&#xff1a;CI/CD、Github Actions与自动化测试部署 打造现代化的自动化工作流&#xff0c;提升团队开发效率。今天咱们将深入探讨 CI/CD 最佳实践、Github Actions 实战经验以及自动化测试与部署策略。 &#x1f4d1; 目录 CI/CD 最佳实践…...

[免费]SpringBoot+Vue3校园宿舍管理系统(优质版)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue3校园宿舍管理系统(优质版)&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue3校园宿舍管理系统(优质版) Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术的不断发展&…...

SNK施努卡 - 机器人测温取样系统

机械手测温取样系统 有色行业自动化 机器人&#xff1a;机械手测温取样系统是以工业机器人为平台&#xff0c;技术相对成熟稳定&#xff0c;利用机器人的灵活性&#xff0c;自动往测温取样枪上安装探头&#xff0c;自动将探头伸进高温铜水内进行测温取样&#xff0c;自动拆除废…...

goframe开发一个企业网站 验证码17

Go验证码功能实现详解 目录结构 ├── internal │ ├── controller │ │ └── captcha │ │ └── captcha.go │ ├── logic │ │ └── captcha │ │ └── captcha.go │ └── service │ └── captcha.go1. Serv…...

【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题

目录 1. 单例模式 (1) 饿汉模式 (2) 懒汉模式 1. 单线程版本 2. 多线程版本 2. 解决懒汉模式产生的线程安全问题 (1) 产生线程安全的原因 (2) 解决线程安全问题 1. 通过加锁让读写操作紧密执行 方法一 方法二 2. 处理加锁引入的新问题 问题描述 …...

MySQL电商多级分类表设计方案对比

MySQL电商多级分类表设计方案对比 在电商系统中&#xff0c;多级分类是一个常见的需求&#xff0c;用于组织和管理商品类别&#xff0c;合理的设计可以提高系统的性能和可维护性。本文将详细介绍三种不同的多级分类表设计方案&#xff0c;我们将使用宠物分类作为示例数据&…...

网络安全工程师需要知道哪些IPSec的基本原理?

IPSec是一种端到端的安全协议&#xff0c;为IP数据包提供认证、完整性和加密服务。它通过在IP层实现安全功能&#xff0c;确保数据在传输过程中的机密性、完整性和真实性。IPSec广泛应用于VPN、远程访问和企业内部网络通信等领域&#xff0c;是保护互联网通信安全的重要手段。 …...

leetcode 148. 排序链表 中等

给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5]示例 3&#xff1a; …...

随机森林与Bagging回归器在农业产量时序预测中的集成学习应用

1. 项目概述与核心价值在农业领域&#xff0c;精准预测作物产量从来都不是一个简单的数学问题&#xff0c;它直接关系到从田间地头到国家粮仓的资源配置效率。过去&#xff0c;我们更多地依赖农艺师的经验和简单的历史平均数据&#xff0c;但面对日益复杂的气候变化和市场波动&…...

2026年5款AI声音克隆工具对比实测,短音频素材如何免训练生成口播声?

短视频团队卡在声音克隆这一步很多做矩阵账号的运营同学反馈&#xff1a;手头只有主播15秒的口播片段&#xff0c;想批量生成不同脚本的配音口播&#xff0c;但主流工具要么要求3分钟以上音频、要么克隆后口型错位、要么导出后还得手动配到视频里——整个链路断在‘声’上。更棘…...

Flut Renamer:免费跨平台批量文件重命名工具的完整使用指南

Flut Renamer&#xff1a;免费跨平台批量文件重命名工具的完整使用指南 【免费下载链接】renamer Flut Renamer - A bulk file renamer written in flutter (dart). Available on Linux, Windows, Android, iOS and macOS. 项目地址: https://gitcode.com/gh_mirrors/ren/ren…...

终极硬件信息伪装技术:5大内核级修改方案深度解析

终极硬件信息伪装技术&#xff1a;5大内核级修改方案深度解析 【免费下载链接】EASY-HWID-SPOOFER 基于内核模式的硬件信息欺骗工具 项目地址: https://gitcode.com/gh_mirrors/ea/EASY-HWID-SPOOFER 硬件指纹追踪已成为现代数字隐私面临的最大威胁之一。无论是网站追踪…...

微信小程序wxapkg逆向解析原理与合规源码还原实践

1. 这不是“破解”&#xff0c;而是合法合规的源码审计实践微信小程序生态里&#xff0c;每天有数百万个新版本上线&#xff0c;而开发者真正能拿到手的&#xff0c;往往只有.wxapkg文件——一个经过混淆、压缩、资源内联、逻辑分包的二进制容器。很多人第一反应是&#xff1a;…...

如何免费绕过iOS激活锁:Applera1n完整解决方案指南

如何免费绕过iOS激活锁&#xff1a;Applera1n完整解决方案指南 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否曾因忘记Apple ID密码而面对无法使用的iPhone束手无策&#xff1f;或者购买的二手…...

如何高效构建金融数据采集与分析工作流:AKShare深度应用指南

如何高效构建金融数据采集与分析工作流&#xff1a;AKShare深度应用指南 【免费下载链接】akshare AKShare is an elegant and simple financial data interface library for Python, built for human beings! 开源财经数据接口库 项目地址: https://gitcode.com/gh_mirrors/…...

OneNote Markdown插件:重新定义智能笔记编辑的架构革命

OneNote Markdown插件&#xff1a;重新定义智能笔记编辑的架构革命 【免费下载链接】NoteWidget Markdown add-in for Microsoft Office OneNote 项目地址: https://gitcode.com/gh_mirrors/no/NoteWidget 你是否曾为OneNote中复杂的格式设置而烦恼&#xff1f;是否在技…...

如何快速掌握游戏逆向工程:FromSoftware资源解析终极指南

如何快速掌握游戏逆向工程&#xff1a;FromSoftware资源解析终极指南 【免费下载链接】BinderTool Dark Souls II / Dark Souls III / Bloodborne / Elden Ring bdt, bhd, bnd, dcx, tpf, fmg and param unpacking tool 项目地址: https://gitcode.com/gh_mirrors/bi/BinderT…...

在Node.js服务中集成Taotoken实现统一的大模型API调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Node.js服务中集成Taotoken实现统一的大模型API调用 对于需要在产品中集成AI能力的中小团队而言&#xff0c;直接管理多个大模型…...