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

Rust 中的字符串类型:`str` 和 `String`

Rust 中的字符串类型:&strString

文章目录

  • Rust 中的字符串类型:`&str` 和 `String`
    • 1. &str:不可变的字符串引用
    • 2. String:可变的字符串
    • 3、字符串使用综合案例
      • 代码
      • 执行结果

在 Rust 编程语言中,有两种主要的字符串类型: &strString。这两种类型在不同的场景下有不同的用途和特性。

1. &str:不可变的字符串引用

&str字符串切片类型,它是对已有字符串的引用。通常用于引用固定的字符串字面量或者 String 对象的切片。以下是 &str 的主要特性:

  • 不可变性&str 类型的字符串是不可变的,一旦创建就不能修改其内容。
  • 静态分配&str 类型的字符串的大小在编译时已知,并且通常存储在只读内存中。
  • 不拥有所有权&str 只是对字符串的引用,并不拥有它的所有权。因此,它不负责内存管理。
fn main() {// 创建字符串切片let static_str: &str = "hello world";// 创建字符串切片的引用let static_str_ref: &str = &static_str;// 打印字符串切片println!("Static string slice: {}", static_str);println!("Static string slice reference: {}", static_str_ref);
}

运行结果:

Static string slice: hello world
Static string slice reference: hello world

&str 通常用于函数参数、表示静态的不可变字符串以及字符串切片的处理。

2. String:可变的字符串

String动态字符串类型,它是一个堆上分配的可变的字符串。以下是 String 的主要特性:

  • 可变性String 类型的字符串是可变的,其大小在运行时可以动态变化。因此,你可以修改其内容和大小。
  • 动态分配String 类型的字符串的内存是在堆上动态分配的,可以根据需要动态增长。
  • 拥有所有权String 对象拥有其所包含字符串的所有权,并负责其内存的管理。因此,它负责分配和释放内存。
fn main() {// 创建动态字符串let mut dynamic_string = String::from("hello");// 追加字符串内容dynamic_string.push_str(", world");// 打印动态字符串println!("Dynamic string: {}", dynamic_string);
}

运行结果:

Dynamic string: hello, world

String 通常用于需要动态创建、修改和拥有的字符串,以及对字符串进行各种操作和处理

总的来说,&strString 两种字符串类型各有其特点,你可以根据具体需求选择合适的类型来处理字符串。

3、字符串使用综合案例

代码

fn main() {// 使用字符串字面量创建静态字符串let static_str = "hello world";// 使用 String::from() 方法从字符串字面量创建动态字符串let dynamic_str_from = String::from("hello");// 使用 to_string() 方法从其他类型创建动态字符串let num = 42;let num_to_string = num.to_string();// 使用 String::new() 方法创建空的动态字符串let mut empty_str = String::new();empty_str.push_str("hello 111");empty_str.push_str(" world");// 使用 format! 宏创建格式化的字符串let formatted_str = format!("The answer is {}", 42);// 使用 String::with_capacity() 方法创建具有指定容量的空字符串let mut str_with_capacity = String::with_capacity(10);str_with_capacity.push_str("0123456789");// 不会报错:即使指定了容量为10,push_str() 方法会自动重新分配更大的内存空间来容纳更多的数据。str_with_capacity.push_str("1111111");// 演示字符串创建的结果println!("Static string: {}", static_str);println!("Dynamic string from string literal: {}", dynamic_str_from);println!("String from number: {}", num_to_string);println!("Empty string: {}", empty_str);println!("Formatted string: {}", formatted_str);println!("String with capacity: {:?}", str_with_capacity);
}

执行结果

C:/Users/Administrator/.cargo/bin/cargo.exe run --color=always --package hello-rust --bin hello-rustFinished dev [unoptimized + debuginfo] target(s) in 0.00sRunning `target\debug\hello-rust.exe`
Static string: hello world                
Dynamic string from string literal: hello 
String from number: 42                    
Empty string: hello 111 world             
Formatted string: The answer is 42        
String with capacity: "01234567891111111" 进程已结束,退出代码为 0

相关文章:

Rust 中的字符串类型:`str` 和 `String`

Rust 中的字符串类型:&str 和 String 文章目录 Rust 中的字符串类型:&str 和 String1. &str:不可变的字符串引用2. String:可变的字符串3、字符串使用综合案例代码执行结果 在 Rust 编程语言中,有两种主要…...

Visual Studio(VS) 搭建 QT 开发环境

Visual Studio(VS) 搭建 QT 开发环境 在当今的软件开发领域,Visual Studio(VS)是一款备受欢迎的集成开发环境(IDE),而 QT 则是一个强大的跨平台应用程序框架。将两者结合使用,可以为开发人员提供高效、便捷的开发体验。本文将详细介绍如何在 VS2022 中搭建 QT 开发环…...

Qt模拟面试(超硬核)

1. 请简要介绍一下你的 Qt 开发经验。 建议:诚实地描述你的 Qt 经验,包括你使用过的 Qt 版本、开发过的项目类型、遇到的挑战以及如何解决它们。 假如你没有开发经验,可以提供一些关于 Qt 开发的一般信息和常见的经验分享。 Qt 是一个跨平…...

某眼实时票房接口获取

某眼实时票房接口获取 前言解决方案1.找到veri.js2.找到signKey所在位置3.分析它所处的这个函数的内容4.index参数的获取5.signKey参数的获取运行结果关键代码另一种思路票房接口:https://piaofang.maoyan.com/dashboard-ajax https://piaofang.maoyan.com/dashboard 实时票房…...

cesium键盘控制相机位置和姿态

该类主要用于监听键盘事件并在用户按下不同按键时执行相应的相机操作,如改变相机的位置、偏航角、俯仰角和翻滚角,从而实现在三维场景中的漫游。 以下是代码的主要逻辑: 导入Cesium库,并定义一个flags对象,其中包含了…...

基于ArrayList实现简单洗牌

前言 在之前的那篇文章中,我们已经认识了顺序表—>http://t.csdnimg.cn/2I3fE 基于此,便好理解ArrayList和后面的洗牌游戏了。 什么是ArrayList? ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表&…...

Paddle实现人脸对比

人脸对比 人脸对比,顾名思义,就是对比两个人脸的相似度。本文将用Paddle实现这一功能。 PS:作者肝了整整3天才稍微搞明白实现方法 数据集准备 这里使用百度AI Studio的开源数据集: 人脸数据_数据集-飞桨AI Studio星河社区 (b…...

挖一挖:PostgreSQL Java里的double类型存储到varchar精度丢失问题

前言 大概故事是这样的,PostgreSQL数据库,表结构: create table t1(a varchar);然后使用标准的Java jdbc去插入数据,其基本代码如下: import java.sql.*; public class PgDoubleTest {public static void main(Stri…...

函数对象基本使用

一、函数对象概念 1.重载函数调用操作符的类,其对象常称为函数对象 2.函数对象使用重载的()时,行为类似函数调用,也叫仿函数 本质: 函数对象(仿函数)是一个类,不是一个函数 二、函数对象使用 特点: 函…...

浅谈HTTP

浅谈HTTP 要通过netty实现HTTP服务器(或者客户端),首先你要了解HTTP协议。 HTTP在客户端 - 服务器计算模型中用作请求 - 响应协议。 例如,web浏览器可以是客户端,并且在托管网站的计算机上运行的应用程序可以是服务器。 客户端向服务器提交…...

HarmonyOS NEXT应用开发之@Provide装饰器和\@Consume装饰器:与后代组件双向同步

Provide和Consume,应用于与后代组件的双向数据同步,应用于状态数据在多个层级之间传递的场景。不同于上文提到的父子组件之间通过命名参数机制传递,Provide和Consume摆脱参数传递机制的束缚,实现跨层级传递。 其中Provide装饰的变…...

Docker 安装 | 部署MySQL 8.x 初始设置

1、准备工作 如果不想看前面的废话请直接右边目录跳到 运行容器 处 默认你已经有 docker 环境。 Windows 推荐 Docker Desktop (下载地址)并基于 WSL2 运行 Docker 环境 mac 推荐 Orbstack (下载地址)(这个很节省资源&…...

linux三剑客之流编辑器sed

sed(stream editor)是Linux和Unix系统中一个非常强大的文本处理工具。它主要用于对文本数据进行过滤和转换。sed 可以在不打开文件的情况下,直接对输入流进行操作,并且可以将结果输出到标准输出或文件。 基本语法: s…...

【Android Studio】上位机-安卓系统手机-蓝牙调试助手

【Android Studio】上位机-安卓系统手机-蓝牙调试助手 文章目录 前言AS官网一、手机配置二、移植工程三、配置四、BUG五、Java语言总结 前言 提示:以下是本篇文章正文内容,下面案例可供参考 AS官网 AS官网 一、手机配置 Android Studio 下真机调试 …...

怎样把学浪购买的课程下载下来

如何把学浪已购买的课程下载下来?这里就教大家一个方法,利用一个工具轻轻松松把视频下载下来 这个工具我打包成压缩包了,有需要的自己取一下 链接:https://pan.baidu.com/s/1y7vcqILToULrYApxfEzj_Q?pwdkqvj 提取码:kqvj --来自百度网盘超级会员V1…...

SD-WAN如何解决更有性价比地跨境网络问题

云桥通SD-WAN利用智能路由和负载均衡技术,优化数据传输路径,提高网络性能和可靠性。这意味着数据在跨国传输时可以更快到达目的地,减少延迟和丢包率。跨境SD-WAN提高了网络连接速度和质量,使用户能够更快地访问跨国业务所需的资源…...

第15章 File类与IO流

一 java.io.File类的使用 1.1 概述 File类及本章下的各种流,都定义在java.io包下。一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录(俗称文件夹),与平台无关。(体会万事万物皆对象)File 能新…...

C语言基础语法-教案16(从小白到劝退之结构体初阶)

最近给大家争取到一个 深夜福利 保证你在深夜手机刷到 嘎嘎香~ 那就是 大流量卡 缺点:月租太便宜 185GB~ 100分钟通话时长~ 长期套餐~ 畅想自由的气息 流量自由的同时还拥有超长通话,而且免费领取。 名额有限,咱们废话不多说直接上…...

Linux:ip和ip协议的初步认识

文章目录 ip协议基本认识ip协议的报头网段划分ip的类型划分 ip协议基本认识 前面对于TCP的内容已经基本结束了,那么这也就意味着在传输层也已经结束了,那么下一步要进入的是的是网络层,网络层中也有很多种协议,这里主要进行解析的…...

Android12 简单的共享内存驱动实现 参考Ashmem

Android12 共享内存驱动实现 SOC:RK3568 system:Android12 概述: 1. 概述 Ashmem(Anonymous Shared Memory,Android 匿名共享内存),它基于 mmap 系统调用,可以让不同进程将同一段…...

物理安全和逻辑安全在信息安全中的重要作用

在信息时代,信息安全已经成为企业和个人不可或缺的重要组成部分。物理安全和逻辑安全作为信息安全的两大支柱,发挥着至关重要的作用。 什么是物理安全和逻辑安全? 物理安全是指通过技术手段,对计算机设备、网络设备、数据中心等…...

每日一题 --- 滑动窗口最大值[力扣][Go]

滑动窗口最大值 题目:239. 滑动窗口最大值 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff1…...

TensorBoard可视化+Confustion Matrix Drawing

for later~ 代码阅读 1. 加载trainset import argparse import logging import os import numpy as npimport torch from torch import distributed from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriterfrom backbones import get_…...

012——LED模块驱动开发(基于I.MX6uLL)

目录 一、 硬件原理图 二、 驱动程序 三、 应用程序 四、 Makefile 五、操作 一、 硬件原理图 又是非常经典的点灯环节 ,每次学新语言第一步都是hello world,拿到新板子或者学习新的操作系统,第一步就是点灯。 LED 的驱动方式&#xff0…...

基于springboot实现房屋租赁管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现房屋租赁系统演示 摘要 房屋是人类生活栖息的重要场所,随着城市中的流动人口的增多,人们对房屋租赁需求越来越高,为满足用户查询房屋、预约看房、房屋租赁的需求,特开发了本基于Spring Boot的房屋租赁系统。 …...

168.乐理基础-中古调式概述

如果到这五线谱还没记住还不认识的话去看102.五线谱-高音谱号与103.五线谱-低音谱号这两个里,这里面有五线谱对应的音名,对比着看 如果不认识调号去看112.五线谱的调号(一)、113.五线谱的调号(二)、114.快…...

【项目实战】【Docker】【Git】【Linux】部署V2rayA项目

今天着手了一个全新领域的项目,从完全没有头绪到成功运行,记录一下具体的部署流程 github项目链接V2rayA 一开始拿到以后完全没有抓手,去阅读了一下他的帮助文档 写着能用docker运行,就去下载了一个Docker配置了一下 拉取代码到…...

mac 切换 jdk

查看 mac 上都有哪些版本 /usr/libexec/java_home -V看准版本切换 按前缀切换 比如 export JAVA_HOME/usr/libexec/java_home -v 1.8这样会随机一个 1.8 的 如果想再确定一个比如 openjdk export JAVA_HOME/usr/libexec/java_home -v 1.8.0_292这个方式是临时的&#xff0c…...

MD5加密返回32位密文字符串

前言: 项目中需要调用其他系统的 api 接口,接口使用的是按一定规则生成 MD5 密文作为签名来进行身份验证,本文仅记录 32 位 MD5 密文的生成方式,仅供参考。 什么是MD5 加密? MD5 加密是一种加密算法,MD5…...

npm常用命令技巧

NPM (Node Package Manager) 是 JavaScript 的包管理工具,广泛用于管理项目中的依赖。无论是前端项目还是Node.js后端项目,NPM 都扮演着重要的角色。本文将介绍 NPM 中常用的几个命令,并提供相应的代码示例。 1. 初始化项目:npm …...

小程序购物平台/广东seo快速排名

最近学习php,按照书上的描述,下载好apache和php后,按照其中配置进行,结果遇到了上述问题。花费了近一个半小时的时间解决了上述问题。现把解决问题过程中看到的方法总结如下。 最先肯定是一定要注意版本问题,apache和p…...

别人帮做的网站怎么修改/品牌咨询

策略模式:定义了算法族,分别分装起来,让它们之间可以相互替换,此模式让算法的变化可以独立于使用算法的用户。 /** * Created by wqc on 2017/10/3. * 算法抽象类(武器抽象类) */public interface WeaponBe…...

做生存曲线网站/深圳网络推广培训学校

非乐观锁场景时序图: 乐观锁场景示意图: 假设有一个账户余额表 user_balance,其中有两个字段:user_id 和 balance,分别表示用户 ID 和账户余额。现在有两个用户同时进行充值操作,充值金额分别为 100 元…...

帮人做兼职的网站吗/北京建站

排序和搜索是数据结构和算法学习中的两个最基本的操作。关于排序,我在上一篇已经做了比较详细的介绍,请参考 http://www.cnblogs.com/chenxizhang/archive/2009/04/22/1441209.html 这一篇我们来关注一下搜索。我们同样把目光放在Array这个最基础的数据类…...

上海工商查询网官方网站/软件开发流程八个步骤

ProtoBuf,全称是Protocol Buffers, 它是谷歌内部用的一种高效的、可扩展的对结构化数据进行编码的格式规范。谷歌自己内部很多程序之间的通信协议都用了ProtoBuf。 下面介绍的是使用Java ProtoBuf的基本步骤: 1.http://code.google.com/p/protobuf/downl…...

口碑好的网站开发公司电话/深圳网络营销推广招聘网

1. 问题描述: 假设现在有两个自然数 A 和 B,S 是 A ^ B 的所有约数之和。请你求出 S mod 9901 的值是多少。 输入格式 在一行中输入用空格隔开的两个整数 A 和 B。 输出格式 输出一个整数,代表 S mod 9901 的值。 数据范围 0 ≤ A&…...