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: …...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
