"首次提交"

This commit is contained in:
2024-06-08 15:01:12 +08:00
parent 6e0f708d0a
commit 84349a2469
112 changed files with 3272 additions and 0 deletions

1
string_learn/.gitignore vendored Executable file
View File

@ -0,0 +1 @@
/target

8
string_learn/Cargo.toml Executable file
View File

@ -0,0 +1,8 @@
[package]
name = "string_learn"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

58
string_learn/src/main.rs Executable file
View File

@ -0,0 +1,58 @@
fn main() {
println!("Hello, world!");
string_learn();
}
fn string_learn() {
//字符串字面值 类型:&str
let str1 = "this is a &str";
//从字符串字面值创建一个string类型String
let str2 = String::from("hello");
//字符串引用。 类型: &string
let str3 = &str2;
//字符串切片 类型:&str
let str3_1 = &str2[0..2];
//拼接字符串
let str4 = String::from("world");
//let str5 = str2 + str4;//这是不允许的,+ 右边必须是字符串的切片或者字符串字面值
let str5 = str2 + &str4; //经过这句之后 str2 的所有权已经移交到 + 的实现函数里面了,使用后就被释放了。
//使用format 宏去连接字符串
let str6 = format!("{}{}", str5, "aaa");
//字符串不允许使用下标进行访问:
//rust的字符串是unicode编码的每个“字母”所占用的byte数是不等长得。
println!("长度为 {}", "中文".len());//这里的结果应该是6每个中文占三个字节
println!("长度为 {}", "AB".len());//这里的结果应该是2每个ascii占1bytes
/* 除此之外,还有很多其他的国家、文化的语言,可能是多个字母才能表达一个意思的,还有的是逆序的
所以也没法进行拆分单个 “字母”这里的字母指的就是unicode标量值
*/
//获取字符串对应的内存数据
let buff = "中文".bytes();
print!("中文 bytes is [");
for it in buff {
print!("{} ", it);
}
println!("]");
//当我们使用字符串切片的获取一部分内容的时候需要额外小心,
//每种语言其char的大小是不一样的所以如果获取的内容处于两个char之间就会panic
let s = &"中文"[0..3];
println!("字符串切片 中文[0..3] is {}", s);
//let s = &"中文"[0..2];//一个中文char占用3byte这里只取了两个byte就会panic
//遍历所有char可以用chars方法
print!("遍历所有char [");
for it in "这是一个中文+表情💚DE字符串".chars() {
print!("{} ", it);
}
println!("]");
//println!("char0 is {}", "adb"[0]); //默认不支持根据索引进行获取因为无法保证能够获取到一个有效的unicode标量值 char
}