知识点:两种字符串类型
下面展示一些 内联代码片。
rust
fn main() {
// &str --- 字符串切片,写死在代码里的,不能改
let s1 = "hello";
// String --- 堆上分配的,可以修改
let mut s2 = String::from("hello");
// String 可以追加内容
s2.push_str(" world");
println!("{}", s2); // hello world
// String 可以追加单个字符
s2.push('!');
println!("{}", s2); // hello world!
// &str 转 String
let s3 = s1.to_string();
println!("{}", s3);
// String 转 &str
let s4 = s2.as_str();
println!("{}", s4);
}
核心规则
&str String
能修改吗 ❌ 不能 ✅ 可以(加 mut)
创建方式 "hello" String::from("hello")
什么时候用 只读、固定文本 需要拼接、修改
动手试试
补全下面的代码:
fn main() {
// 补全:用 String::from 创建一个可变字符串 greeting,内容为 "你好"
// 提示:记得加 mut
// 补全:给 greeting 追加 ",世界"
// 提示:用 push_str
// 补全:给 greeting 追加字符 '!'
// 提示:用 push,注意字符用单引号
// 打印 greeting,期望输出: 你好,世界!
贴代码
rust
fn main() {
// 补全:用 String::from 创建一个可变字符串 greeting,内容为 "你好"
// 提示:记得加 mut
let mut greeting = String::from("你好");
// 补全:给 greeting 追加 ",世界"
// 提示:用 push_str
greeting.push_str(",世界");
// 补全:给 greeting 追加字符 '!'
// 提示:用 push,注意字符用单引号
greeting.push('!');
// 打印 greeting,期望输出: 你好,世界!
println!("{}", greeting);
// 补全:把 greeting 转成 &str 赋给 result
// 提示:用 as_str()
let result = greeting.as_str();
// 打印 result
println!("{}", result);
}
评语
完全正确!👏
你掌握了:
String::from() 创建可变字符串
push_str() 追加字符串、 push() 追加单个字符
as_str() 把 String 转成 &str