// #![allow(unused_variables)]
// type File = String;
fn main() {
//练习1
// let mut f1 = File::from("f1.txt");
// open(&mut f1);
// //read(&mut f1,&mut vec![]);
// close(&mut f1);
//练习2
//字符串
// let my_name = "Pascal";
// greet(my_name);
// let s = String::from("hello world");
// let hello = &s[0..5];
// let world = &s[6..11];
// println!("s value is {}",s);
// println!("hello value is {}",hello);
// println!("world value is {}",world);
//练习2
// let s = String::from("hello world");
// //hello没有引用整个String s,而是引用了s的一部分
// let hello = &s[0..5];
// let world = &s[6..11];
// //从0开始索引
// let slice = &s[0..2];
// let slice = &s[..2];
// //切片包含最后一个字节
// let len = s.len();
// let slice = &s[4..len];
// let slice = &s[4..];
// //截取完整的String切片
// let slice = &s[0..len];
// let slice = &s[..];
// //中文切片
// //s只取前两个字节,本案例中每个汉字占用三个字节
// //切片没有落在边界处,此时程序会直接崩溃退出
// let s = "中国人";
// let a = &s[0..2];
//练习3
// let mut s = String::from("hello world");
// let word = first_words(&s);
// s.clear();
// println!("The first word is: {}",word);
//练习4
//集合的切片 切片是对集合的部分引用
// let a = [1, 2, 3, 4, 5];
// let slice = &a[1..3];
// assert_eq!(slice,&[2,3]);
//练习5
//字符串字面量
// let s = "Hello,world";
//练习6
//str类型是硬编码可执行文件,无法被修改
//String则是一个可增长,可改变且具有所有权的UTF-8编码字符串
//练习7
//String与&str的转换
// let s = String::from("hello,world");
// say_hello(&s);
// say_hello(&s[..]);
// say_hello(s.as_str());
//练习8
// let hello = String::from("中国人");
//练习9
//追加
// let mut s = String::from("Hello ");
// s.push_str("rust");
// println!("追加字符串 push_str() -> {}",s);
// s.push_str("!");
// println!("追加字符串 push_str() -> {}",s);
//练习10
//插入
// let mut s = String::from("Hello rust!");
// s.insert(5, ',');
// println!("插入字符 insert() -> {}",s);
// s.insert_str(6, "I like");
// println!("插入字符串 insert_str() -> {}",s);
//练习11
//替换
// let string_replace = String::from("I like rust.
// Learning rust is my favorite!");
// let new_string_replace = string_replace.replace("rust", "Rust");
// dbg!(new_string_replace);
//替换个数
// let new_string_replacen = string_replace.replacen("rust", "Rust", 1);
// dbg!(new_string_replacen);
//练习12
//替换范围
// let mut string_replace = String::from("I like rust.
// Learning rust is my favorite!");
// string_replace.replace_range(7..8, "R");
// dbg!(string_replace);
//练习13
//删除
//pop删除并返回字符串的最后一个字符安
//remove 删除并返回字符串中指定位置的字符
//truncate 删除字符串中从指定位置开始到结尾的全部字符
//clear 清空字符串
// let mut string_pop = String::from("rust pop 中文!");
// let p1 = string_pop.pop();
// let p2 = string_pop.pop();
// dbg!(p1);
// dbg!(p2);
// dbg!(string_pop);
// let mut string_remove = String::from("测试remove方法");
// println!("string_remove 占 {} 个字符",
// std::mem::size_of_val(string_remove.as_str()));
// let s1 = string_remove.remove(0);
// let s2 = string_remove.remove(3);
// dbg!(string_remove);
// string_remove.truncate(1);
// string_remove.clear();
//练习14
//清空字符串
// let mut string_clear = String::from("string clear");
// string_clear.clear();
// dbg!(string_clear);
//练习15
//连接Concatenate
// let string_append = String::from("hello ");
// let string_rust = String::from("rust");
// let result = string_append + &string_rust;
// let mut result = result +"!";
// result += "!!!";
// println!("连接字符串 + -> {}",result);
//练习16
// let s1 = String::from("hello,");
// let s2 = String::from("world!");
// let s3 = s1 + &s2;//实际上是调用String add方法,s1所有权已经发生转移
// assert_eq!(s3,"hello,world!");
// // println!("{}",s1);//报错
//练习17
// let s1 = "hello";
// let s2 = String::from("rust");
// let s = format!("{} {}!", s1, s2);
// println!("{}",s);
//练习18
//字符串转译
// let byte_escape = "I'm writing \x52\x75\x73\x74";
// println!("What are you doing\x3F (\x3F means ?) {}",byte_escape);
// let unicode_codepoint = "\u{211D}";
// let character_name = ""Doble-struck capital R"";
// println!(
// "Unicode character {} (U+211D) is called {}",
// unicode_codepoint, character_name
// );
// // 换行了也会保持之前的字符串格式
// // 使用\忽略换行符
// let long_string = "String literals
// can span multiple lines.
// The linebreak and indentation here ->\
// <- can be escaped too!";
// println!("{}", long_string);
//练习19
// println!("{}","hello \x52\x75\x73\x74");
// let raw_str = r"Escapes don't work here:\x3F \u{211D}";
// println!("{}",raw_str);
// let quotes = r#"And the I said:"There is no escapte""#;
// println!("{}",quotes);
// let longer_delimiter = r###"A string with "# in it. And even "##!"###;
// println!("{}", longer_delimiter);
//练习20
//字符串
// for c in "中国人".chars() {
// println!("{}",c);
// }
}
// fn say_hello(s: &str) {
// println!("{}", s);
// }
// fn first_words(s:&String) -> &str{
// &s[..1]
// }
// fn greet(name: String) {
// println!("Hello,{}!",name);
// }
// fn open(f: &mut File) -> bool {
// true
// }
// fn close(f: &mut File) -> bool {
// true
// }
// #[allow(dead_code)]
// fn read(f:&mut File,save_to:&mut Vec ) -> !{
// unimplemented!()
// } 源码地址