Lesson08---string类(1)

news2024/9/21 4:04:21
  • 1. 为什么要学习string
  • 2. 标准库中的string
  • 3. string类的模拟实现
  • 4. 扩展阅读

1. 为什么学习string类?

1.1 C语言中的字符串

在c语言中没有string类型只有char类型,char类型只能是一个字符非常的不好用,想要字符串还必须要弄一个char的数组非常的容易越界出现随机值

string就是字符串,string类其实就是在原来的基础上添加了增删查改扩容这些东西的,c语言里面的不符合面向对象编程

1.2 两个面试题(暂不做讲解)

牛客网-题目已下线_牛客网 (nowcoder.com)

. - 力扣(LeetCode)

OJ 中,有关字符串的题目基本以 string 类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本 都使用string 类,很少有人去使用 C 库中的字符串操作函数。

2. 标准库中的string 

2.1 string(了解)

cplusplus.com/reference/string/string/?kw=string

1. 字符串是表示字符序列的类
2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作
单字节字符字符串的设计特性。
3. string 类是使用 char( 即作为它的字符类型,使用它的默认 char_traits 和分配器类型 ( 关于模板的更多信
息,请参阅 basic_string)
4. string 类是 basic_string 模板类的一个实例,它使用 char 来实例化 basic_string 模板类,并用 char_traits
allocator 作为 basic_string 的默认参数 ( 根于更多的模板信息请参考 basic_string)
5. 注意,这个类独立于所使用的编码来处理字节 : 如果用来处理多字节或变长字符 ( UTF-8) 的序列,这个
类的所有成员 ( 如长度或大小 ) 以及它的迭代器,将仍然按照字节 ( 而不是实际编码的字符 ) 来操作。
总结:
1. string 是表示字符串的字符串类
2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作 string 的常规操作。
3. string 在底层实际是: basic_string 模板类的别名, typedef basic_string<char, char_traits, allocator>
string;
4. 不能操作多字节或者变长字符的序列。
使用 string 类时,必须包含 #include 头文件以及 using namespace std

2.2 string类的常用接口说明(注意下面我只讲解最常用的接口)

sting类的默认成员函数

(1) empty string constructor (default constructor)

(1)默认构造函数

Constructs an empty string, with a length of zero characters.

构造一个长度为零个字符的空字符串。

 

 (2) copy constructors

(2) 复制构造函数

3) substring constructor

(3) 子字符串构造函数

Copies the portion of str that begins at the character position pos and spans len characters (or until the end of str, if either str is too short or if len is basic_string::npos).复制从字符位置 pos 开始并跨越 len 字符的 str 部分(或者直到 str 的末尾,如果 str 太短或 len 为 basic_string::npos)。

这里要注意的是 下标是从0开始 

注意看这里len是缺省参数,

 这里就可以理解成假如没有写这个参数就把后面所有的都拷贝过来,有多少拷多少

如果第三个参数明显大于被拷贝的,那么也是有多少烤多少

他的底层就类似于拷贝到char数组的/0,然后就停止拷贝

 

(4) from c-string

(4) 从 C 字符串

 

 (5) from buffer

(5) 来自缓冲区

Copies the first n characters from the array of characters pointed by s.

从 s 指向的字符数组中复制前 n 个字符。

 

 这里的第一个参数必须是要是在代码段上面的字符串

如果这里采用变量的形式就会和第四个冲突

和第四个的缺省会产生冲突 

(6) fill constructor 

(6) 填充构造函数

 string的赋值重载=这里给提供了三种         

3.string的赋值               

 4.string的底层

string的底层其实就是char数组封装成了类

它可以直接用下标直接修改访问

5.迭代器(iterator)

如果想遍历一个字符串我们可以这样

 

用下标的方式遍历

还可以用迭代器来遍历 

 这样也可以用来遍历,这里可以把迭代器理解成string类中是char的数组,那么这里面每一个char的地址就是迭代器,然后我们让string++是无法完成这种功能的

熟悉了以后可以直接这样写 

但是这里并不一定是一个指针 ,只是可以这样理解

迭代器可以用在后面的二叉树和链表里面

范围for的底层其实就是迭代器

6.反向迭代器

 如果想反着遍历一个字符串显然auto就不够用用了这里就需要用反向迭代器了

 

7.排序

如果想给一个string排序(给char的数组按字典序排序)

 

 

 只排序前俩个

8.string的尾插

这里有做限制只能插入一个字符不能插入字符串双引号下就不行 

 如果要添加字符串要用append

但是这俩种都不好用,string还提供了运算符重载 

 

9.string的尾删 

这里只可以删除一个字符

如果要删除一段字符的话需要 用erase

#include <iostream>  
#include <string>  

int main() {  
    std::string str = "Hello, World!";  
    
    // 删除从索引5开始的所有字符  
    str.erase(5);  
    std::cout << str << std::endl; // 输出: Hello  

    // 重新赋值  
    str = "Hello, World!";  
    
    // 删除从索引5开始的7个字符  
    str.erase(5, 7);  
    std::cout << str << std::endl; // 输出: Hello!  

    // 重新赋值  
    str = "Hello, World!";  
    
    // 删除从索引5到索引12的字符  
    str.erase(str.begin() + 5, str.begin() + 12);  
    std::cout << str << std::endl; // 输出: Hello!  

    return 0;  
}

 

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

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

相关文章

华溢艺术之花在社区绽放

华溢艺术之花在社区绽放 这是一个阳光明媚的周末&#xff0c;华溢艺术少儿艺术体验走进了夷陵区营盘社区碧桂园小区。这次活动不仅为社区的孩子们带来了丰富多彩的艺术体验&#xff0c;还让家长们目睹了孩子们在艺术成长道路上那些优美动人的闪光点。 活动现场&#xff0c;热闹…

线性代数|机器学习-P32循环矩阵的特征向量-傅里叶矩阵

文章目录 1. 大纲2. 循环矩阵2.1 移位矩阵P2.2 P的特征值和特征向量2.3 循环卷积矩阵2.4 循环卷积计算 3. 傅里叶矩阵 1. 大纲 循环矩阵在机器学习&#xff0c;图像处理中的应用循环卷积矩阵的特征值&#xff0c;特征向量&#xff0c;卷积规则循环卷积矩阵多项式表达&#xff…

kaggle平台free使用GPU

1、注册 请保证在【科学上网】条件下进入如下操作&#xff0c;只有在注册账户和手机号验证时需要。 step1&#xff1a;注册账户 进入kaggle官网&#xff1a;https://www.kaggle.com/&#xff0c;点击右上角【Register】进入注册页面 最好选择使用邮箱注册&#xff08;&#…

零域(微隔离)详述

一、什么是零信任微隔离&#xff1f; 微隔离的实现方式是将数据中心内部所有的业务按照特定的原则划分为数个微小的网络节点&#xff0c;根据动态策略分析对这些节点执行访问控制&#xff0c;在逻辑上将这些节点隔离开&#xff0c;限制用户横向移动&#xff0c;这就是微…

docker-compose 快速部署nacos-standalone单节点

一、nacos 介绍 官网&#xff1a; https://nacos.io/ 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台 二、如何使用docker-compose 快速部署nacos2.3.1 ⚠️ &#xff1a; nacos-standalone 部署方式 依赖于 数据库&#xff0c;请先配置好数据库实例&…

日系编曲:了解日系音乐 日系和声特征 设计日系和声 和弦进行摘抄

了解日系音乐 日系音乐风格多样&#xff0c;涵盖流行、摇滚、民谣、古典等多种类型。以下是部分知名的日系音乐作品、歌手及乐队&#xff1a; 作品 《First Love》是宇多田光的代表作之一&#xff0c;旋律悠扬&#xff0c;情感真挚&#xff0c;展现了初恋的美好与青涩&#xf…

c++ 原型模式

文章目录 什么是原型模式为什么要使用原型模式使用场景示例 什么是原型模式 用原型实例指定创建对象的种类&#xff0c;并通过拷贝这些原型创建新的对象&#xff0c;简单理解就是“克隆指定对象” 为什么要使用原型模式 原型模式&#xff08;Prototype Pattern&#xff09;是…

C++学习笔记----6、内存管理(一)---- 使用动态内存(1)

当你使用现代结构&#xff0c;例如std::vector,std::string等等&#xff0c;从一开始到现在以及到未来&#xff0c;C是一个安全的编程语言。该语言提供了许多的道路&#xff0c;路线以及红绿灯&#xff0c;比如C核心指导&#xff0c;静态代码分析器来分析代码的正确性&#xff…

SQLite3 数据库

一、SQLite3 命令 1. 基本命令 .tables&#xff1a;用于查看数据库中的表。.headers on/off&#xff1a;开启或者关闭表头&#xff0c;方便查看表结构。.mode column&#xff1a;使列对齐&#xff0c;增强数据的可读性。.width 列宽1 列宽2&#xff1a;设置每一列的列宽&…

大量图片进行自适应处理

首先我们手里有一个视频&#xff0c;但是我们对视频进行图像处理的话视频很难暂停进行观察&#xff0c;我们可以写一个按键坚挺&#xff0c;但是小编这里介绍另一个办法&#xff0c;大致思路为&#xff0c;把视频进行截帧为图片的集合&#xff0c;再对该集合进行统一的图像处理…

基于UniApp+Springboot花店微信小程序

此花店小程序是多商家&#xff0c;多用户&#xff0c;以及后台管理员操作的花市集小程序系统&#xff0c;前端采用vue 和 UniApp&#xff0c;后端采用java Springboot 设计开发。前后端分离的花店微信小程序系统&#xff0c;数据库采用独立的数据库mysql 小程序端界面主要采用…

yolo数据集钢材表面缺陷v8下载适用yolov5等全版本已标注txt格式

钢材表面缺陷检测数据集介绍 数据集概述 本数据集专为钢材表面缺陷检测任务而设计&#xff0c;包含了大量的钢材表面图像&#xff0c;每张图像均带有详细的缺陷标注信息。数据集旨在帮助研究人员和开发人员训练高精度的目标检测模型&#xff0c;以应用于钢材制造和质量控制等多…

本地化云桌面系统环境VMware horizon搭建

前言&#xff1a;预准备使用空闲服务器&#xff0c;搭建轻办公云桌面环境&#xff0c;类似“华为云桌面FusionAccess”&#xff0c;或天翼云桌面系统。注意云桌面不是桌面云&#xff0c;云桌面的适用场景为团队化云上办公&#xff0c;可私有部署/云化部署。horizon是VMware旗下…

Linux 软硬连接

1. 硬链接 实际上并不是通过文件名来找到磁盘上的文件&#xff0c;而是通过inode。在linux中可以让多个文件名对应于同一个 inode&#xff0c;而这种方式就是建立硬链接。硬链接是文件系统中的一种链接类型&#xff0c;它创建了文件的一个额外的目录项&#xff0c;但不占用额外…

网工面试题(安全)

上一篇&#xff1a;网工面试题&#xff08;数通&#xff09; 防火墙 防火墙的应用场景 防火墙&#xff1a;部署在网络出口处/服务器区(数据中心&#xff09;/广域网接入&#xff0c;用于防止外界黑客攻击、保护内网安全硬件。 传统防火墙和下一代防火墙的区别 传统防火墙的功能…

访问win10共享文件夹:用户或密码不正确 以及 未授予用户在此计算机上的请求登录类型

因为安装的是神州网信政府版&#xff0c;该版本通常包含更严格的安全策略和访问控制&#xff0c;设置了共享文件夹后&#xff0c;访问共享文件夹时出现错误。 1、首先报错&#xff1a;用户或密码不正确 将》网络访问&#xff1a;本地账户的共享和安全模型&#xff0c;修改为&a…

C#上位机使用Microsoft.Office.Interop.Excel和EPPlus库对Excel或WPS表格进行读写操作

C#上位机使用Microsoft.Office.Interop.Excel和EPPlus库对Excel或WPS表格进行写操作 一、使用Microsoft.Office.Interop.Excel库 1、通过NuGet包管理器添加引用 按照下图中红框所示进行操作。 需要安装Microsoft.Office.Interop.Excel包 添加Microsoft Office 16.0 Object …

预训练语言模型的前世今生 - 从Word Embedding到BERT

目录 一、预训练 1.1 图像领域的预训练1.2 预训练的思想二、语言模型 2.1 统计语言模型2.2 神经网络语言模型三、词向量 3.1 独热&#xff08;Onehot&#xff09;编码3.2 Word Embedding四、Word2Vec 模型五、自然语言处理的预训练模型六、RNN 和 LSTM 6.1 RNN6.2 RNN 的梯度消…

Maven的相关配置和使用

Maven的配置&#xff1a; Maven的配置和Java差不多&#xff0c;从镜像站下载相关的Maven版本压缩包&#xff0c;然后解压到自己的D盘&#xff0c;在进行系统变量的配置&#xff0c;新建变量Maven_HOME&#xff0c;然后值设置为Maven的地址&#xff0c;一定是点开文件后就能出现…

【LLM】文生视频相关开源数据集(VidGen、Panda、Cogvideox等)

note 总结了VidGen数据集、Panda-70m数据集、Openvid数据集、OpenVid-1M数据集、Cogvideox训练数据准备过程、ShareGPT4Video数据集等在一篇综述中还总结了评估指标包括&#xff1a;峰值信噪比&#xff08;PSNR&#xff09;、结构相似性指数&#xff08;SSIM&#xff09;、Inc…