【百例RUST - 010】字符串

【百例RUST - 010】字符串

第一章 字符串定义

第01节 创建空的字符串

案例代码

rust 复制代码
fn main(){
    // 创建一个空的字符串
    let mut msg1: String = String::new();

    // 向字符串当中添加一个数据
    msg1.push_str("hello");

    // 输出数据
    println!("{}", msg1);
}

// hello

第02节 from创建字符串

案例代码

rust 复制代码
fn main(){
    // 创建一个空的字符串
    let msg2: String = String::from("hello");
 
    // 输出数据
    println!("{}", msg2);
}

// hello

第03节 str创建字符串

案例代码

rust 复制代码
fn main(){
    // 创建一个空的字符串
    let msg3: String = "helloworld".to_string();
 
    // 输出数据
    println!("{}", msg3);
}

// helloworld

第二章 字符串操作

第01节 更新字符串

案例代码,采用 push_str

rust 复制代码
fn main(){
    // 创建一个空的字符串
    let mut msg1: String = String::from("hello");
    // 更新字符串
    msg1.push_str("world");

    let msg2: String = "rust".to_string();

    msg1.push_str(&msg2);
    // 输出数据
    println!("{}", msg1);
    println!("{}", msg2);
}

// helloworld
// rust

需要注意的是,这里的 msg1msg2 并没有失去所有权。

案例代码 采用 push

rust 复制代码
fn main(){
    // 创建一个空的字符串
    let mut msg1: String = String::from("hello");

    // 更新字符
    msg1.push('A');
    // 输出数据
    println!("{}", msg1); 
}

// helloA

需要注意的是,上面的 push 只能采用单引号,添加一个字符,其他情况均报错

第02节 字符串的加号

案例代码

rust 复制代码
fn main(){
    // 创建一个空的字符串
    let mut msg1: String = String::from("hello");
    let mut msg2: String = "world".to_string();

    // 更新字符串
    let msg3 = msg1 + &msg2;
    // 输出数据
    // println!("{}", msg1); 
    println!("{}", msg2); 
    println!("{}", msg3); 
}

// 需要注意的是 msg1 已经失去了所有权, 将所有权交给了 msg3 所以 msg1 将无法使用!
// world
// helloworld

第03节 字符串的format

案例代码

rust 复制代码
fn main(){
    // 创建一个空的字符串
    let  msg1: String = String::from("hello");
    let  msg2: String = String::from("world");
    let  msg3: String = String::from("rust");
    let  msg : String  = format!("{}-{}-{}", msg1, msg2, msg3);

    // 输出数据
    println!("{}", msg1); 
    println!("{}", msg2); 
    println!("{}", msg3); 
    println!("{}", msg); 
}

// hello
// world
// rust
// hello-world-rust

对于 format 的解释 format!("{}-{}-{}", msg1, msg2, msg3)

复制代码
1、内存分配与返回值的问题
	format! 的工作流程,可以看作是一个 "工厂制作" 的过程。
	A、分配空间: 他会在 堆(Heap)上面开辟一块全新的内存空间。
	B、内容拷贝: 它按照你指定的格式 {}-{}-{}  将字符串 msg1, msg2, msg3 的内容拷贝到这个新的内存中。
	C、返回对象: 它会返回一个全新的 String 对象给变量 msg
	需要注意的是,这里的 msg 是一个独立的实体,修改 msg 不会影响到 msg1,  反之亦然。 它们在内存当中是完全分开的。
	
2、形象化的理解
	我们可以想象 msg1, msg2, msg3 是三本书。
	A、执行 format! 就像是拿着这三本书去  复印机上复印。
	B、复印机会根据我们的要求(中间加上横杠) 印出一本新的书 msg
	C、结果: 原本的三本书,还在我们的书架上面。(可以继续 println!) 而且我们手上多了一本缝合好的新书。

第三章 获取子字符

第01节 字符串切片

rust 复制代码
fn main(){
    // 创建一个空的字符串
    let  msg: String = String::from("你好");
     
     // 通过索引获取字符串当中的数据
    let element = &msg[0..3];

    println!("{}", element);
}

// 你

最快。O(1) 复杂度,但若索引切断了字符会触发崩溃。 因为 UTF-8 中,中文占据 3个字节的大小

第02节 字符获取

案例代码

rust 复制代码
fn main(){
    // 创建一个空的字符串
    let  msg: String = String::from("你好");
     
     // 通过索引获取字符串当中的数据
     let element: Option<char> = msg.chars().nth(0);
     match element {
         None => println!("数据不合法"),
         Some(x) => println!("{}", x),
     }
}

// 你

最安全。处理 Unicode 友好,但是时间复杂度较高 O(n)

第四章 字符串的遍历

第01节 字符的遍历方式

案例代码 核心函数 chars()

rust 复制代码
fn main(){
    // 创建一个空的字符串
    let  msg: String = String::from("你好");
     
     // 采用字符的方式进行遍历 chars
     for element in msg.chars(){
        println!("{}", element)
     }
}

//  你
//  好

第02节 字节的遍历方式

案例代码 核心函数 bytes()

rust 复制代码
fn main(){
    // 创建一个空的字符串
    let  msg: String = String::from("你好");
     
     // 采用字符的方式进行遍历 bytes
     for element in msg.bytes(){
        println!("{}", element)
     }
}

//  228
//  189
//  160
//  229
//  165
//  189
相关推荐
阿米亚波23 分钟前
【C++ STL】std::unordered_multiset
开发语言·数据结构·c++·笔记·stl
我是唐青枫33 分钟前
Java ReentrantLock 实战详解:比 synchronized 更灵活的可重入锁
java·开发语言
QH1392923188043 分钟前
# R&S ZNB43 ZNA43 ZNA67矢量网络分析仪
开发语言·网络·php
脚踏实地皮皮晨2 小时前
003003001_Grid控件
开发语言·windows·算法·c#·visual studio
十年磨剑走天涯2 小时前
C++ STL 容器操作复杂度速查表
开发语言·c++
万少2 小时前
DeepSeek-V4-Flash 正式版上线了,但这 3 个坑我帮你提前踩了
前端·javascript·后端
明月_清风2 小时前
🚀 Palantir Foundry 本体论实战:当 Ontology 从"知识图谱"进化为"企业操作系统"
前端·后端
always_TT2 小时前
【Python requirements.txt 依赖管理】
开发语言·python
15Moonlight2 小时前
C++进阶(09):特殊类设计
开发语言·c++
宁风NF2 小时前
JavaScript:网络请求与前端通信
开发语言·前端·javascript·网络·学习·ecmascript