rust学习笔记7-344. 反转字符串

今天学习两个类型字符串String和字符串切片(&str)

字符串String是一个堆分配的可变字符串类型

源码

pub struct String {

vec: Vec<u8>,

}

字符串切片(&str) 本质上是一个动态大小的字符串切片,它表示对一段 UTF-8 编码的字符串的不可变视图。

二者区别

特性 &str String
存储位置 字符串字面值直接存储在程序的静态数据段中(不可变)。 动态分配在堆上,大小可以调整。
大小 动态大小(DST,动态大小类型),无法直接存储在栈上,需要通过引用使用(如 &str)。 堆分配的可变字符串,大小可以调整。
可变性 不可变,内容无法更改。 可变,内容可以增删改。
所有权 无所有权,通常是一个引用(&str)。 有所有权,负责管理自己的内存生命周期。
rust 复制代码
    //声明一个字符串
    let s = String::new();        // 一个空字符串
    let s = "Hello".to_string();
    let s = String::from("world");
    let s: String = "also this".into();
    //声明一个字符串切片
    let s1: &str = "Hello, World"; // 存储在静态内存区域
  1. 反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

示例 1:

输入:s = ["h","e","l","l","o"]

输出:["o","l","l","e","h"]

示例 2:

输入:s = ["H","a","n","n","a","h"]

输出:["h","a","n","n","a","H"]

提示:

1 <= s.length <= 105

s[i] 都是 ASCII 码表中的可打印字符

rust 复制代码
pub fn reverse_string(s: &mut Vec<char>) {
    let mut left = 0;
    let mut rigth = s.len() - 1;
    while left < rigth {
        let temp = s[left];
        s[left] = s[rigth];
        s[rigth] = temp;
        //Rust 不支持i++ 和i--
        left +=1;
        rigth -=1;
        
    }
        
}
fn main() {
    let mut s: Vec<char> = vec!['h','e','l','l','o'];
    reverse_string(&mut s); //传递可变引用
    println!("{:?}", s);
 
}

总结 本题也是一道算法基础题,与其他语言相比有两点注意的地方,

1.Rust 不支持i++ 和i--,因为这两个运算符出现在变量的前后会影响代码可读性,减弱了开发者对变量改变的意识能力,但对于会其他语言如Java、Python的同学来讲,初期有点不适应。

2.函数传参 (1)直接 reverse_string(s);//这样所有权就转移,不行,(2) reverse_string(&s);// 传递不可变引用,这样干也不行,(3) reverse_string(&mut s);//传递可变引用, 正确

相关推荐
云上艺旅6 小时前
K8S学习之基础七十四:部署在线书店bookinfo
学习·云原生·容器·kubernetes
你觉得2056 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
A旧城以西7 小时前
数据结构(JAVA)单向,双向链表
java·开发语言·数据结构·学习·链表·intellij-idea·idea
无所谓จุ๊บ7 小时前
VTK知识学习(50)- 交互与Widget(一)
学习·vtk
FAREWELL000757 小时前
C#核心学习(七)面向对象--封装(6)C#中的拓展方法与运算符重载: 让代码更“聪明”的魔法
学习·c#·面向对象·运算符重载·oop·拓展方法
吴梓穆8 小时前
UE5学习笔记 FPS游戏制作38 继承标准UI
笔记·学习·ue5
Three~stone8 小时前
MySQL学习集--DDL
数据库·sql·学习
齐尹秦8 小时前
HTML 音频(Audio)学习笔记
学习
V---scwantop---信8 小时前
英文字体:大胆都市街头Y2Y涂鸦风格品牌海报专辑封面服装字体 Chrome TM – Graffiti Font
笔记·字体
瞌睡不来8 小时前
(学习总结32)Linux 基础 IO
linux·学习·io