美文网首页Rust 学习笔记
rust - str - String 学习笔记

rust - str - String 学习笔记

作者: 国服最坑开发 | 来源:发表于2020-02-12 16:21 被阅读0次

rust中的str, String, 分的比较清.
简单的可以理解为: str 是分配在栈上, String分配在堆上.

0x01 String str 初始化

    let mut a = String::from("food"); // 在堆上分配内存
    println!("{:p}", a.as_ptr()); // 打印堆内存的地址
    println!("{:p}", &a); // 打印变量a 在栈上的地址
    println!("{}", a.len()); // 字符串在堆内存中的字节长度, 不是 字符长度!!!
    a.reserve(10); // 增加堆的内存长度
    println!("{}", a.capacity()); // 总字节容量

    let str: String = String::new(); // 创建空对象
    let str2: String = String::from("hello rust"); // 创建堆内存
    let str3: String = String::with_capacity(20); // 创建20字节的空堆内存
    let str4: &'static str = "the tao of rust"; // 静态变量
    let str5: String = str4.chars().filter(|c| !c.is_whitespace()).collect(); // .chars() 返回 各字符
    let str6: String = str4.to_owned(); // 与 to_string() 基本相同
    let str7: String = str4.to_string();
    let str: &str = &str4[11..15]; // 取静态字符串的部分内容, 学名 切片 (slice)

0x02 字符串操作

  • 字符串增加
   let mut hello = String::from("Hello, ");
    hello.push('R');
    hello.push_str("Gorey");
    hello.insert_str(2, "-");
    println!("{}", hello);

    let left = "the tao".to_string();
    let mut right = "Rust".to_string();
    let sum = left + &right;
    println!("{}", sum);
    right += "Hahaha";
    println!("{}", right);
  • 字符串遍历
    let s = String::from("good morning");
    let s: String = s.chars().enumerate().map(|(i, c)| {
        if i % 2 == 0 {
            c.to_lowercase().to_string()
        } else {
            c.to_uppercase().to_string()
        }
    }).collect();
    println!("{}", s);
  • 字符串位置查询,及字串
    let mut s = String::from("Hello Gorey");
    s.remove(4);
    println!("{}", s);

    let m = s.pop().unwrap();
    println!("{}", m);
    println!("{}", s);

    s.truncate(4);
    println!("{}", s);

    s.clear();
    println!("{}", s);


    let mut s = String::from("Hello Gorey");
    let bo = s.find("Gorey").unwrap_or(s.len());
    println!("index of :[{}]", bo);

    let t :String = s.drain(..bo).collect();
    println!("drain rst :[{}]", t);
w```
输出结果:

Hell Gorey
y
Hell Gore
Hell

index of :[6]
drain rst :[Hello ]

相关文章

网友评论

    本文标题:rust - str - String 学习笔记

    本文链接:https://www.haomeiwen.com/subject/xbgjxhtx.html