// 填空并修复错误 fn main() { let s = String::from("hello, 世界"); let slice1 = &s[0..1]; //提示: `h` 在 UTF-8 编码中只占用 1 个字节 assert_eq!(slice1, "h");
let slice2 = &s[7..10];// 提示: `世` 在 UTF-8 编码中占用 3 个字节 assert_eq!(slice2, "世"); // 迭代 s 中的所有字符 for (i, c) in s.chars().enumerate() { if i == 7 { assert_eq!(c, '世') } }
println!("Success!") }
// 填空 fn main() { let mut s = String::new(); s.push_str("hello");
let v = vec![104, 101, 108, 108, 111];
// 将字节数组转换成 String let s1 = String::from_utf8(v).unwrap(); assert_eq!(s, s1);
println!("Success!") }
// 填空 use std::mem;
fn main() { let story = String::from("Rust By Practice");
// 阻止 String 的数据被自动 drop let mut story = mem::ManuallyDrop::new(story);
let ptr = story.as_mut_ptr(); let len = story.len(); let capacity = story.capacity();
assert_eq!(16, len);
// 我们可以基于 ptr 指针、长度和容量来重新构建 String. // 这种操作必须标记为 unsafe,因为我们需要自己来确保这里的操作是安全的 let s = unsafe { String::from_raw_parts(ptr, len, capacity) };