C++字符串中的string类操作
愿我如星君如月,夜夜流光相皎洁。
——《车逍遥篇》【宋】范成大
目录
正文:
主要特点:
基本操作:
代码演示:
总结:
今天我们接着上次的章节继续,这次我们来说一个为解决上个方法的缺陷而诞生的方法string类。
C++字符串操作中的陷阱
正文:
我们先来看一看什么是C++,还有关于它的定义:
在C++中,string
是一个非常重要的类,用于处理文本数据。它是标准模板库(Standard Template Library, STL)的一部分,定义在头文件<string>
中。与C语言中的字符数组(如char[]
)相比,string
类提供了更丰富的功能和更高的安全性。
主要特点:
- 动态内存管理:
string
类自动管理内存,不需要手动分配和释放内存,减少了内存泄漏的风险。 - 丰富的成员函数:
string
类提供了大量的成员函数来执行各种字符串操作,如连接、查找、比较、替换、插入和删除等。 - 边界检查:与C语言中的字符数组相比,
string
类在访问越界时会抛出异常或返回错误,提高了程序的安全性。(正好可以解决C语言中的字符数组带来的缺陷)
基本操作:
- 当然在开始之前我们需要提前写入这个类的头文件:include<string>
- 定义字符串然后进行初始化。
- 同样也可以赋值,添加元素到字符串中。
- 访问字符串的元素,还可以对其进行修改。
- 比较字符串之间的大小,字符串的长度大小,然后输出结果。(< > == != >= <=)。
- 拼接字符串或者拷贝字符串。
代码演示:
include<iostream>
using namespace std;
include<string>
include<string.h>
int main()
{
string n;
//三种初始化方式
string n="li hua";
string s("my name");
string s=string("name");
利用字符和计数来初始化x(输出结果是 8个x)
string x('h',8);两种求长度的结果是一样的
cout<<n.size()<<endl;
cout<<n.length()<<endl;
设计的字符串的预存大小
cout<<n.capacity()<<endl;下面就是两个字符数组的大小比较,之前讲到的关系运算符都可以用
cout<<(n==s)<<endl;
cout<<(n<s)<<endl;
cout<<(n!=s)<,endl;转换为C语言风格的字符串,利用c_str()的方式来转换
const char*c_str1=n.c_str();
cout<<"转换后的字符串"<<c_str<<endl;随机访问(获取字符串中的某个元素)
string a="mine";
cout<<s[0]<<endl;//类似数组的访问方式指定访问:
char ch = n[0]; // 使用下标访问,但注意越界
char firstChar = n.front(); // 获取第一个字符
char lastChar = n.back(); // 获取最后一个字符字符串拷贝
string s=n;直接链接两个字符串字符串的拼接:
string b="is yours";
string c="peter";
string d=c+b;
c+=b;这一步和上面的那步相似,只不过是简化的方式;而且完整的写法是:c=c+b;这里省略了一步。 for(int i=0;i<n.size; i++)
{
cout<<n[i]<<endl;
}for(int i=0;i<d.size; i++)
{
cout<<n[i]<<endl;
}return 0;
}
总结:
string结合了C++的新特性。
使用起来比原始的C语言的方法更加的安全和方便。
对比性能要求不高的程序可以使用。
新语言的分享:
然后我就要说一下最近关注到的新语言rust,这个语言目前是最有希望可以去达到C++成就的语言,因为这个语言在开发的时候就会避免C语言中经常出现的一些安全型问题。
Rust 是一种系统编程语言,它注重安全性、速度和并发性。Rust 旨在提供与 C 和 C++ 相当的性能,同时确保内存安全,这是通过所有权、借用和生命周期的概念来实现的。Rust 旨在提供零成本抽象,意味着在运行时使用 Rust 编写的程序不会比使用传统系统编程语言编写的程序慢。
以下是 Rust 的一些关键特性:
- 所有权系统:Rust 通过所有权系统管理内存,不需要垃圾回收。每个值都有一个所有者,当所有者离开作用域时,其资源会被释放。这个机制避免了内存泄漏和其他常见的内存错误。
- 借用:Rust 提供了借用的概念,允许你使用引用而不取得所有权。这样,函数可以在不拥有数据的情况下读取数据(不可变借用),或者同时读写数据(可变借用),但同时保证内存安全。
- 并发:Rust 的并发模型强调线程安全。Rust 的类型系统和所有权规则确保了数据竞争是不可能的,因此可以更轻松地编写安全的并发代码。
- 零成本抽象:Rust 在编译时不增加任何运行时开销。这意味着,开发者可以使用高级的抽象来编写代码,而不会影响性能。
- 包管理器和构建工具:Rust 有一个内置的包管理器和构建系统,名为 Cargo,它简化了依赖管理和构建过程。
Rust 适合用在需要高性能和高并发的场合,例如开发操作系统、文件系统、游戏引擎、网络服务器等。
🆗到这里,这篇关于:C++字符串中的string类操作就说完了,求一个免费的赞,感谢阅读。
下期预告:C++最强功能——指针
相关文章:

C++字符串中的string类操作
愿我如星君如月,夜夜流光相皎洁。 ——《车逍遥篇》【宋】范成大 目录 正文: 主要特点: 基本操作: 代码演示: 总结: 今天我们接着上次的章节继续,这次我们来说一个为解决上个方法的缺陷而诞…...

axios设置responseType: ‘blob‘,获取接口返回的错误信息
在axios的请求中当后端接口返回的是文件流的情况下,我们需要在请求参数里面设置responseType: blob,如果接口报错,默认前端无法获取后端返回的错误信息。 解决方法:通过FileReader获取错误信息 async handleFetch() {const res aw…...

【C++】:模板初阶—函数模板|类模板
✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山岗! 💫 欢迎来到我的学习笔记! 本文参考博客:一同感受C模版的所带来的魅力 一、泛型编程思想 首先…...

Java 远程执行服务器上的命令
在Java中使用JSch库执行远程服务器上的命令是一种常见的做法,特别是在需要自动化运维任务或者进行远程文件操作时。以下是基于Codekru网站提供的示例,展示如何使用JSch库在远程服务器上执行单个或多个命令。 准备工作 首先,确保您的项目中已…...

3DMax基础- 创建基础模型
目录 零.软件简介 一. 标准基本型 长方体 圆锥体 球体 圆柱体 管状体 圆环 四棱锥 茶壶 平面编辑 加强型文本 二. 扩展基本体 三.复合对象 变形 散布 一致 连接 图形合并 布尔 并集 合并 交集 差集 四.门和窗 门 窗 植物,栏杆,墙 零.软件简介 3…...

JavaScript 知识点(从基础到进阶)
🌏个人博客主页:心.c 前言:JavaScript已经学完了,和大家分享一下我的笔记,希望大家可以有所收获,花不多说,开干!!! 🔥🔥ǵ…...

计算机网络知识点复习——TCP协议的三次握手与四次挥手(连接与释放)
TCP协议的三次握手与四次挥手(连接与释放) 一、前言二、简单的知识准备1. TCP协议的主要特点2. TCP报文段 三、TCP连接的建立(三次握手)四、TCP连接的释放(四次挥手)五、TCP连接与释放的总结六、结束语 一、…...

SpringDataJPA系列(7)Jackson注解在实体中应用
SpringDataJPA系列(7)Jackson注解在实体中应用 常用的Jackson注解 Springboot中默认集成的是Jackson,我们可以在jackson依赖包下看到Jackson有多个注解 一般常用的有下面这些: 一个实体的示例 测试方法如下: 按照上述图片中的序号做个简…...

【Spring Boot 3】【Web】统一封装 HTTP 响应体
【Spring Boot 3】【Web】统一封装 HTTP 响应体 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总…...

Linux如何做ssh反向代理
SSH反向代理是一种通过SSH协议实现的安全远程访问方式,它允许客户端通过SSH连接到一台具有公网IP的代理服务器,然后这台代理服务器再将请求转发给内部网络中的目标主机。以下是实现SSH反向代理的步骤: 一、准备工作 确保服务器配置ÿ…...

Verilog语法+:和-:有什么用?
Verilog语法:和-:主要用于位选择,可以让代码更简洁。 一、位选择基础 在Verilog中,位选择可以通过直接索引来实现,例如: reg [7:0] data; wire select_a; wire [2:0] select_b; assign select_a data[3]; assign select_b …...

stm32F103 串口2 中断 无法接收指定字符串 [已解决]
stm32F103 串口2中断接收指定字符串 USART 初始化和中断配置示例中断处理函数示例关键点总结 确保在串口配置中正确使能空闲中断 ( USART_IT_IDLE) 是关键。这个中断可以帮助你在串口接收一帧数据完成后,进行相应的处理和分析。 为了确保你在串口配置时能避免类似问…...

Matlab/Simulink和AMEsim联合仿真(以PSO-PID算法为例)
目录 安装软件和配置环境变量 Matlab/Simulink和AMEsim联合仿真详细流程 非常重要的一点 Simulink模型和AMEsim模型用S-Function建立连接 从AMEsim软件打开Matlab Matlab里的设置 Matlab的.m文件修改(对于PSO-PID算法) 运行程序 我印象中好像做过…...

超声波测距模块HC-SR04(基于STM32F103C8T6HAL库)
超声波测距模块参考资料 1.电路连接及引脚配置 触发信号PA3只需要输出10us的高电平,所以直接设置成 普通的GPIO端口即可;回响信号使用外部中断,上升沿信号产生外部中断,打开定时器,下降沿再产生一次中断,读…...

Go语言结构体和元组全面解析
Go语言中的复合类型与其应用 在编程中,标准类型虽然方便,但无法满足所有需求。Go通过支持结构体和元组类型,为开发者提供了自定义数据类型的能力。本文将介绍如何定义结构体、如何使用指针操作结构体、如何通过元组返回多个值等内容…...

集成电路学习:什么是SDK软件开发工具包
SDK:软件开发工具包 SDK,即Software Development Kit(软件开发工具包),是一套由软件提供商或其他组织提供的开发工具集合。这些工具旨在帮助开发者更快速、更便捷地创建、测试和部署软件应用程序。以下是对SDK的详细解…...

java后端如何发送http请求
用java后端发送请求需要用到的一个工具包为HttpClient。HttpClient是Apache的一个子项目,是高效的、功能丰富的支持HTTP协议的客户端编程工具包。 引入依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId&…...

装WebVideoCreator记录
背景,需要在docker容器内配置WebVideoCreator环境,配置npm、node.js WebVideoCreator地址:https://github.com/Vinlic/WebVideoCreator 配置环境,使用这个教程: linux下安装node和npm_linux离线安装npm-CSDN博客 1…...

【编程底层思考】什么是GC Roots
在Java虚拟机(JVM)中,GC Roots是垃圾收集(Garbage Collection,GC)过程中的起点,用于确定对象是否可被回收。GC Roots集合是一组必须活跃的(即必须保留在内存中的)引用&am…...

[STL --stack_queue详解]stack、queue,deque,priority_queue,容器适配器
stack stack介绍 1、stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 2、stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供…...

240907-Gradio插入Mermaid流程图并自适应浏览器高度
A. 最终效果 B. 示例代码 import gradio as grmermaid_code """ <iframe srcdoc <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width" />…...

ubuntu 安装python3 教程
本篇教程,主要介绍如何在Ubuntu上安装python3教程。 1、查看是否有python 在安装前,首先看看自己系统上,是否存在python环境,可能有些系统,默认就安装过python,如果已经有python了,可以直接跳过安装教程。 2、安装步骤 apt update && apt install -y python3 p…...

NOR Flash、NAND Flash……
存储类型描述Compact Flash一种用于便携式电子设备的数据存储设备,于1994年由SanDisk公司推出。SRAM静态随机存取存储器,不需要刷新电路即能保存数据,速度快但集成度低、功耗大。PSRAM伪静态随机存取存储器,结合了SRAM和DRAM的特点…...

【高性能代码】提高代码的性能有哪些方式,如何写出高性能代码,一段代码如何提高这段代码的执行性能,高性能代码开发
【高性能代码】提高代码的性能有哪些方式,如何写出高性能代码,一段代码如何提高这段代码的执行性能,高性能代码开发 提高代码的性能是软件开发中一个重要的方面,尤其是在处理大数据、高并发或实时性要求较高的应用时。以下是一些提…...

2024整理 iptables防火墙学习笔记大全_modepro iptables
Iptables名词和术语 2iptables表(tables)和链(chains) 2表及其链的功能 2 Filter表 2 NAT表 2 MANGLE表 2iptables的工作流程 3iptables表和链的工作流程图 3 二、 iptables实战应用 4iptables命令参数详解 4 iptable…...

实验记录 | 点云处理 | K-NN算法3种实现的性能比较
引言 K近邻(K-Nearest Neighbors, KNN)算法作为一种经典的无监督学习算法,在点云处理中的应用尤为广泛。它通过计算点与点之间的距离来寻找数据点的邻居,从而有效进行点云分类、聚类和特征提取。本菜在复现点云文章过程ÿ…...

【OJ】常用技巧
1. 模版 #include<bits/stdc.h> using namespace std;int main(){ios::sync_with_stdio(false);cin.tie(0);// write herereturn 0; }2. 填充数组 memset是一个字节一个字节填充,如果是使int类型填充非0或者-1就会报错,如 int a[100]; memset(a…...

Redis:Redis性能变慢的原因
一、淘汰策略性能问题 当使用Redis当作缓存使用时,通常会给这个实例设置内存上限maxmemory,然后设置一个数据淘汰策略;如果Redis实例设置了内存上限maxmemory,那么也有可能导致Redis变慢。 原因在于,当Redis内存达到…...

Linux多线程——利用C++模板对pthread线程库封装
文章目录 线程封装主要框架线程启动线程等待其他信息 测试函数 线程封装 我们之前介绍过pthread的线程库,这个线程库主要是基于C语言的void*指针来进行传参和返回 我们使用C的模板对其封装可以让他的使用更加方便,并且经过测试可以让我们更加直观的了解…...

SpringBoot教程(十五) | SpringBoot集成RabbitMq(消息丢失、消息重复、消息顺序、消息顺序)
SpringBoot教程(十五) | SpringBoot集成RabbitMq(消息丢失、消息重复、消息顺序、消息顺序) RabbitMQ常见问题解决方案问题一:消息丢失的解决方案(1)生成者丢失消息丢失的情景解决方案1…...