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本质上是一个类,是C实现好的一个类 初学只用学重要的部分,不可能一次性全部学完 1.构造函数 我们先来看它的几个构造函数 首先(1)就是无参的构造 (2)是…...
ts 中 ReturnType 作用
ReturnType 用于获取函数的返回值类型。 一、基本概念和语法 1. 定义和语法结构 ReturnType是一个泛型类型,其语法为ReturnType<T>,其中T是一个函数类型。例如,如果有一个函数add,ReturnType<typeof add>就可以获取…...
Hadoop + Hive + Apache Ranger 源码编译记录
背景介绍 由于 CDH(Clouderas Distribution Hadoop )近几年已经开始收费并限制节点数量和版本升级,最近使用开源的 hadoop 搭了一套测试集群,其中的权限管理组件用到了Apache Ranger,所以记录一下编译打包过程。 组件…...
Java从入门到精通笔记篇(十二)
枚举类型与泛型 枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中 使用枚举类型设置常量 关键字为enum 枚举类型的常用方法 values()方法 枚举类型实例包含一个values()方法,该方法将枚举中所有的枚举值以数组的形式返回。 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——文件管理
往期目录: 从0开始学习Linux——简介&安装 从0开始学习Linux——搭建属于自己的Linux虚拟机 从0开始学习Linux——文本编辑器 从0开始学习Linux——Yum工具 从0开始学习Linux——远程连接工具 从0开始学习Linux——文件目录 从0开始学习Linux——网络配置 从0开…...
全面介绍软件安全测试分类,安全测试方法、安全防护技术、安全测试流程
一、软件系统设计开发运行安全 1、注重OpenSource组件安全检查和版本更新(black duck) 现在很多云、云服务器都是由开源的组件去搭成的,对于OpenSource组件应该去做一些安全检查和版本更新,尤其是版本管理,定期对在运…...
Leidenアルゴリズムの詳細解説:Pythonによるネットワーク分割の実装
Leidenアルゴリズムの詳細解説:Pythonによるネットワーク分割の実装 目次1. Leidenアルゴリズムの概要2. Python実装例3. グループ分けの結果分析4. なぜこのような分割になるのか5. Leidenアルゴリズムの仕組み6. 実践的な応用例7. 初心者へのアドバイス8. まとめ …...
安当ASP系统:适合中小企业的轻量级Radius认证服务器
安当ASP(Authentication Service Platform)身份认证系统是一款功能强大的身份认证服务平台,特别适用于中小企业。其中,简约型Radius认证服务器是安当ASP系统中的一个重要组成部分。以下是对该系统的详细介绍: 一、主要…...
Vue 组件间传值指南:Vue 组件通信的七种方法
前言 Vue 的组件系统非常强大,允许我们将应用程序拆分成独立且可复用的组件。随着前端开发的复杂性增加,组件间的数据传递和状态管理显得尤为重要。本文将详细介绍几种在 Vue 中常用的组件间传值方法,并结合实际代码示例,帮助您更…...
推荐一个超漂亮ui的网页应用设计
https://andi.cn/download/65211.html...
有什么初学算法的书籍推荐?
对于初学算法的读者,以下是一些值得推荐的书籍: 1、算法超简单:趣味游戏带你轻松入门与实践 作者:童晶 著 推荐理由:本书把趣味游戏应用于算法教学,提升读者的学习兴趣,并通过可视化的图解和动…...
自动化工作流建设指南
🚀 自动化工作流建设指南:CI/CD、Github Actions与自动化测试部署 打造现代化的自动化工作流,提升团队开发效率。今天咱们将深入探讨 CI/CD 最佳实践、Github Actions 实战经验以及自动化测试与部署策略。 📑 目录 CI/CD 最佳实践…...
[免费]SpringBoot+Vue3校园宿舍管理系统(优质版)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue3校园宿舍管理系统(优质版),分享下哈。 项目视频演示 【免费】SpringBootVue3校园宿舍管理系统(优质版) Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术的不断发展&…...
SNK施努卡 - 机器人测温取样系统
机械手测温取样系统 有色行业自动化 机器人:机械手测温取样系统是以工业机器人为平台,技术相对成熟稳定,利用机器人的灵活性,自动往测温取样枪上安装探头,自动将探头伸进高温铜水内进行测温取样,自动拆除废…...
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电商多级分类表设计方案对比 在电商系统中,多级分类是一个常见的需求,用于组织和管理商品类别,合理的设计可以提高系统的性能和可维护性。本文将详细介绍三种不同的多级分类表设计方案,我们将使用宠物分类作为示例数据&…...
网络安全工程师需要知道哪些IPSec的基本原理?
IPSec是一种端到端的安全协议,为IP数据包提供认证、完整性和加密服务。它通过在IP层实现安全功能,确保数据在传输过程中的机密性、完整性和真实性。IPSec广泛应用于VPN、远程访问和企业内部网络通信等领域,是保护互联网通信安全的重要手段。 …...
leetcode 148. 排序链表 中等
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5]示例 3: …...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
