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

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

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

相关文章

RTX RTOS 操作实例分析之---线程(thread)

0 Preface/Foreword 1 线程(thread) 1.1 线程定义 1.1.1 USE_BASIC_THREADS(宏定义) 经过以上步骤(makefile包含),USE_BASIC_THREADS在编译阶段被定义到相应的模块中。 1.1.2 定义线程ID变量…

安装Pillow库的方法最终解答!_Python第三方库

安装Python第三方库Pillow 我的环境:Window10,Python3.7,Anaconda3,Pycharm2023.1.3 pillow库 Pillow库是一个非常强大的图像处理库。它提供了广泛的图像处理功能,让我们可以轻松地读取和保存图像、创建缩略图和合并到…

Java学习day5-面向对象2

构建标准JavaBean快捷方式 快捷键:altinsert(Fn)->构造函数->全选构造带参方法,不选择则空参构造 插件:ptg,安装后右键单击,倒数第三个则为一键构造所有set/get函数 数据类型 基本数据类型:数据值存储在自己的…

欧拉路径欧拉回路

欧拉回路,指遍历图时通过图中每条边且仅通过一次,最终回到起点的一条闭合回路,适用于有向图与无向图,如果不强制要求回到起点,则被称为欧拉路径。 欧拉图:具备欧拉回路的图 无向图:图的所有顶…

代码随想录 Day37 738.单调递增的数字 968.监控二叉树

738.单调递增的数字 class Solution { public:int monotoneIncreasingDigits(int N) {string strNum to_string(N);// flag用来标记赋值9从哪里开始// 设置为这个默认值,为了防止第二个for循环在flag没有被赋值的情况下执行int flag strNum.size();for (int i s…

37-巩固练习(一)

37-1 if语句等 1、问&#xff1a;输出结果 int main() {int i 0;for (i 0; i < 10; i){if (i 5){printf("%d\n", i);}return 0;} } 答&#xff1a;一直输出5&#xff0c;死循环 解析&#xff1a;i5是赋值语句&#xff0c;不是判断语句&#xff0c;每一次循…

路径规划——曲线拟合详解(一):多项式轨迹与QP优化(minimum-snap算法核心部分)

前言 历经一个多星期时间&#xff0c;我们在路径规划——搜索算法部分讲解了7种常见的路径搜索算法&#xff0c;每一种算法的链接放在下面了&#xff0c;有需要的朋友点击跳转即可&#xff1a; 路径规划——搜索算法详解&#xff08;一&#xff09;&#xff1a;Dijkstra算法详…

由平行公设的不同而来三种几何学浅谈

由平行公设的不同而来三种几何学浅谈 欧几里德的《几何原本》 欧几里德的《几何原本》一开始就给出了23个定义&#xff0c;5个公设&#xff0c;5个公理。 23个定义(部分)&#xff1a; 点是没有部分的东西。 线是没有宽度的长度。 线的端点是点。 直线是各点都在同一方向上…

GraalVM运行模式和企业级应用

文章目录 GraalVM运行模式JIT模式AOT模式 GraalVM的问题和解决方案GraalVM企业级应用传统架构的问题Serverless架构函数计算Serverless应用场景Serverless应用 GraalVM内存参数 GraalVM运行模式 JIT模式 JIT&#xff08; Just-In-Time &#xff09;模式 &#xff0c;即时编译模…

重置gitlab root密码

gitlab-rails console -e production user User.where(id: 1).first user User.where(name: "root").first #输入重置密码命令 user.password"admin123!" #再次确认密码 user.password_confirmation"admin123!" #输入保存命令&am…

单例(Singleton)设计模式总结

1. 设计模式概述&#xff1a; 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式免去我们自己再思考和摸索。 就像是经典的棋谱&#xff0c;不同的棋局&#xff0c;我们用不同的棋谱。"套路"经典的设计模式一共有…

Ruby 之交租阶段信息生成

题目 我看了一下&#xff0c;这个题目应该不是什么机密&#xff0c;所以先放上来了。大概意思是根据合同信息生成交租阶段信息。 解答 要求是要使用 Ruby 生成交租阶段信息&#xff0c;由于时间比较仓促&#xff0c;变量名那些就用得随意了些。要点主要有下面这些&#xff1a…

【介绍什么是DDOS】

&#x1f308;个人主页:程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

Qt 的发展历史、现状与启示

Qt 最早在1991年由挪威的两位程序员 Eirik Chambe-Eng 和 Haavard Nord 开发&#xff0c;他们在1994年创立 Trolltech 公司&#xff08;奇趣科技&#xff09;正式经营软件业务。Qt 的第一个公众预览版于1995年面世&#xff0c;之后在2008年被诺基亚收购&#xff1b;2011年到201…

【C++】编程规范之内存规则

在高质量编程中&#xff0c;内存管理是一个至关重要的方面。主要有以下原则&#xff1a; 内存分配后需要检查是否成功&#xff1a;内存分配可能会失败&#xff0c;特别是在内存紧张的情况下。因此&#xff0c;在分配内存后&#xff0c;应该检查分配是否成功。 int* ptr new …

【ZZULIOJ】1030: 判断直角三角形(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 输入三个正整数&#xff0c;判断用这三个整数做边长是否能构成一个直角三角形。 输入 输入三个正整数。 输出 能否构成直角三角形。如能输出&#xff1a;yes.若不能&#xff0c;输出&#xff1a…

java操作mongodb详解

前言 一切操作都应该以官方文档为准&#xff0c;mongodb官网文档地址&#xff1a; https://www.mongodb.com/docs/ &#xff0c;网上关于java操作mongodb的文章偏少&#xff0c;而且有些乱。这篇文章是在项目中使用mongodb后的一些总结&#xff0c;希望能帮到大家。 1.创建mon…

(译) 理解 Elixir 中的宏 Macro, 第四部分:深入化

Elixir Macros 系列文章译文 [1] (译) Understanding Elixir Macros, Part 1 Basics[2] (译) Understanding Elixir Macros, Part 2 - Macro Theory[3] (译) Understanding Elixir Macros, Part 3 - Getting into the AST[4] (译) Understanding Elixir Macros, Part 4 - Divin…

如何开启MySQL的binlog日志

1.启用远程连接&#xff1a; 如果你想要允许远程主机连接到MySQL服务器&#xff0c;需要进行以下步骤&#xff1a; 确保MySQL服务器的防火墙允许远程连接的流量通过。在MySQL服务器上&#xff0c;编辑MySQL配置文件&#xff08;一般是my.cnf&#xff09;&#xff0c;找到bind-…

Go——函数

一. 函数定义 1.1 特点 无需声明原型支持不定变参支持多返回值支持命名返回参数支持匿名函数和闭包函数也是一种类型&#xff0c;一种函数可以赋值给变量不支持嵌套&#xff0c;一个包不能有两个名字一样的函数不支持重载不支持默认参数 1.2 函数声明 函数声明包含一个函数名&…