compound-types/string #198
Replies: 38 comments 16 replies
-
第10题您要求修改以下代码行,但实际上是要把上面一行的 fn main() {
let raw_str = r"Escapes don't work here: \x3F \u{211D}";
// 修改以下代码行,让它工作
assert_eq!(raw_str, "Escapes don't work here: ? ℝ");
// 如果你希望在字符串中使用双引号,可以使用以下形式
let quotes = r#"And then I said: "There is no escape!""#;
println!("{}", quotes);
// 如果希望在字符串中使用 # 号,可以如下使用:
let delimiter = r###"A string with "# in it. And even "##!"###;
println!("{}", delimiter);
// 填空
let long_delimiter = __;
assert_eq!(long_delimiter, "Hello, \"##\"")
} |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
done! 很棒的练习题,其中几个例子也帮助我们对于字符串和切片有了更深刻的了解 |
Beta Was this translation helpful? Give feedback.
-
第8题的答案是无法通过编译的,因为s1 没被使用 |
Beta Was this translation helpful? Give feedback.
-
utf8_slice Example 不能执行也不能修改 |
Beta Was this translation helpful? Give feedback.
-
2022.11.11 Done |
Beta Was this translation helpful? Give feedback.
-
utf8_slice 的 Example 不能正常编译:
|
Beta Was this translation helpful? Give feedback.
-
Done。连着做十几道题好累,昏昏沉沉快做睡着了。 |
Beta Was this translation helpful? Give feedback.
-
第10题直接猪脑过载 |
Beta Was this translation helpful? Give feedback.
-
1、第一题 主要说明正常无法使用 Q: // 修复错误,不要新增代码行
fn main() {
let s: str = "hello, world";
} A: // 修复错误,不要新增代码行
fn main() {
let s: &str = "hello, world";//str->&str
} 2、第二题,两种解法 如果要使用 Q: // 使用至少两种方法来修复错误
fn main() {
let s: Box<str> = "hello, world".into();
greetings(s)
}
fn greetings(s: &str) {
println!("{}",s)
} A: // 第一种解法
fn main() {
let s: &str = "hello, world";//一开始就保证变量为&str
greetings(s)
}
fn greetings(s: &str) {
println!("{}",s)
} //第二种解法
fn main() {
let s: Box<str> = "hello, world".into();
greetings(&s)//可以将`Box<str>`转换为`&str`类型
}
fn greetings(s: &str) {
println!("{}",s)
} 3、第三题,创建String类型 Q: fn main() {
let mut s = __;//填空
s.push_str("hello, world");
s.push('!');
assert_eq!(s, "hello, world!");
} A: fn main() {
let mut s = String::new();
s.push_str("hello, world");
s.push('!');
assert_eq!(s, "hello, world!");
} 4、第四题,字符换的拼接问题 Q: // 修复所有错误,并且不要新增代码行
fn main() {
let s = String::from("hello");
s.push(',');
s.push(" world");
s += "!".to_string();
println!("{}", s)
} A: // 修复所有错误,并且不要新增代码行
fn main() {
let mut s = String::from("hello");//需要声明这个String的值可变
s.push(',');
s.push_str(" world");//拼接字符串需要用push_str()方法
s += "!";//拼接必须保证右边为'&str'类型
println!("{}", s)
} 5、第五题, Q: // 填空
fn main() {
let s = String::from("I like dogs");
// 以下方法会重新分配一块内存空间,然后将修改后的字符串存在这里
let s1 = s.__("dogs", "cats");
assert_eq!(s1, "I like cats")
} A: // 填空
fn main() {
let s = String::from("I like dogs");
// 以下方法会重新分配一块内存空间,然后将修改后的字符串存在这里
let s1 = s.replace("dogs", "cats");
assert_eq!(s1, "I like cats")
} 6、第六题 Q: // 修复所有错误,不要删除任何一行代码
fn main() {
let s1 = String::from("hello,");
let s2 = String::from("world!");
let s3 = s1 + s2;
assert_eq!(s3,"hello,world!");
println!("{}",s1);
} A: // 修复所有错误,不要删除任何一行代码
fn main() {
let s1 = String::from("hello,");
let s2 = String::from("world!");
let s3 = s1.clone() + &s2; //拼接必然是String+&str……,同时拼接后s1丧失所有权,所以这边要用深度拷贝clone来避免后续s1调用失败的情况
assert_eq!(s3,"hello,world!");
println!("{}",s1);
} 7、第七题,两种方法将 Q: // 使用至少两种方法来修复错误
fn main() {
let s = "hello, world";
greetings(s)
}
fn greetings(s: String) {
println!("{}",s)
} A: // 使用至少两种方法来修复错误
fn main() {
let s = "hello, world".to_string();//第一种
greetings(s)
}
fn greetings(s: String) {
println!("{}",s)
} // 使用至少两种方法来修复错误
fn main() {
let s = String::from("hello, world");
greetings(s)
}
fn greetings(s: String) {
println!("{}",s)
} 8、第八题, Q: // 使用两种方法来解决错误,不要新增代码行
fn main() {
let s = "hello, world".to_string();
let s1: &str = s;
} A: //第0种,一开始就不要让String出现(狗头)
fn main() {
let s = "hello, world";
let s1: &str = s;
} // 第一种:as_str
fn main() {
let s = "hello, world".to_string();
let s1: &str = s.as_str();
} //第二种,切片
fn main() {
let s = "hello, world".to_string();
let s1: &str = &s[..];
} //第三种,引用
fn main() {
let s = "hello, world".to_string();
let s1: &str = &s;
} 9、第九题,字符串转义 Q: fn main() {
// 你可以使用转义的方式来输出想要的字符,这里我们使用十六进制的值,例如 \x73 会被转义成小写字母 's'
// 填空以输出 "I'm writing Rust"
let byte_escape = "I'm writing Ru\x73__!";
println!("What are you doing\x3F (\\x3F means ?) {}", byte_escape);
// 也可以使用 Unicode 形式的转义字符
let unicode_codepoint = "\u{211D}";
let character_name = "\"DOUBLE-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);
} A: fn main() {
// 你可以使用转义的方式来输出想要的字符,这里我们使用十六进制的值,例如 \x73 会被转义成小写字母 's'
// 填空以输出 "I'm writing Rust"
let byte_escape = "I'm writing Ru\x73\x74!";
println!("What are you doing\x3F (\\x3F means ?) {}", byte_escape);
// 也可以使用 Unicode 形式的转义字符
let unicode_codepoint = "\u{211D}";
let character_name = "\"DOUBLE-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);
} 10、 Q: /* 填空并修复所有错误 */
fn main() {
let raw_str = r"Escapes don't work here: \x3F \u{211D}";
// 修改上面的行让代码工作
assert_eq!(raw_str, "Escapes don't work here: ? ℝ");
// 如果你希望在字符串中使用双引号,可以使用以下形式
let quotes = r#"And then I said: "There is no escape!""#;
println!("{}", quotes);
// 如果希望在字符串中使用 # 号,可以如下使用:
let delimiter = r###"A string with "# in it. And even "##!"###;
println!("{}", delimiter);
// 填空
let long_delimiter = __;
assert_eq!(long_delimiter, "Hello, \"##\"")
} A: /* 填空并修复所有错误 */
fn main() {
let raw_str = "Escapes don't work here: \x3F \u{211D}";
// 这边需要删除r使得字符码被识别
assert_eq!(raw_str, "Escapes don't work here: ? ℝ");
// 如果你希望在字符串中使用双引号,可以使用以下形式
let quotes = r#"And then I said: "There is no escape!""#;
println!("{}", quotes);
// 如果希望在字符串中使用 # 号,可以如下使用:
let delimiter = r###"A string with "# in it. And even "##!"###;
println!("{}", delimiter);
// 填空
let long_delimiter = "Hello, \"##\"";//在双引号之前加\转义
assert_eq!(long_delimiter, "Hello, \"##\"")
} 11、第十一题,字符串索引 Q: fn main() {
let s1 = String::from("hi,中国");
let h = s1[0]; // 修改当前行来修复错误,提示: `h` 字符在 UTF-8 格式中只需要 1 个字节来表示
assert_eq!(h, "h");
let h1 = &s1[3..5];// 修改当前行来修复错误,提示: `中` 字符在 UTF-8 格式中需要 3 个字节来表示
assert_eq!(h1, "中");
} A: fn main() {
let s1 = String::from("hi,中国");
let h = &s1[0..1]; //切片大小为1
assert_eq!(h, "h");
let h1 = &s1[3..6];// 修改当前行来修复错误,提示: `中` 字符在 UTF-8 格式中需要 3 个字节来表示
assert_eq!(h1, "中");
} 12、第十二题,操作UTF-8字符串 Q: fn main() {
// 填空,打印出 "你好,世界" 中的每一个字符
for c in "你好,世界".__ {
println!("{}", c)
}
} A: fn main() {
// 填空,打印出 "你好,世界" 中的每一个字符
for c in "你好,世界".chars() {
println!("{}", c)
}
}
//打印的结果是:
/*
你
好
,
世
界
*/ 如果是调用 |
Beta Was this translation helpful? Give feedback.
-
1、第一题 主要说明正常无法使用 Q: // 修复错误,不要新增代码行
fn main() {
let s: str = "hello, world";
} A: // 修复错误,不要新增代码行
fn main() {
let s: &str = "hello, world";//str->&str
} 2、第二题,两种解法 如果要使用 Q: // 使用至少两种方法来修复错误
fn main() {
let s: Box<str> = "hello, world".into();
greetings(s)
}
fn greetings(s: &str) {
println!("{}",s)
} A: // 第一种解法
fn main() {
let s: &str = "hello, world";//一开始就保证变量为&str
greetings(s)
}
fn greetings(s: &str) {
println!("{}",s)
} //第二种解法
fn main() {
let s: Box<str> = "hello, world".into();
greetings(&s)//可以将`Box<str>`转换为`&str`类型
}
fn greetings(s: &str) {
println!("{}",s)
} 3、第三题,创建String类型 Q: fn main() {
let mut s = __;//填空
s.push_str("hello, world");
s.push('!');
assert_eq!(s, "hello, world!");
} A: fn main() {
let mut s = String::new();
s.push_str("hello, world");
s.push('!');
assert_eq!(s, "hello, world!");
} 4、第四题,字符换的拼接问题 Q: // 修复所有错误,并且不要新增代码行
fn main() {
let s = String::from("hello");
s.push(',');
s.push(" world");
s += "!".to_string();
println!("{}", s)
} A: // 修复所有错误,并且不要新增代码行
fn main() {
let mut s = String::from("hello");//需要声明这个String的值可变
s.push(',');
s.push_str(" world");//拼接字符串需要用push_str()方法
s += "!";//拼接必须保证右边为'&str'类型
println!("{}", s)
} 5、第五题, Q: // 填空
fn main() {
let s = String::from("I like dogs");
// 以下方法会重新分配一块内存空间,然后将修改后的字符串存在这里
let s1 = s.__("dogs", "cats");
assert_eq!(s1, "I like cats")
} A: // 填空
fn main() {
let s = String::from("I like dogs");
// 以下方法会重新分配一块内存空间,然后将修改后的字符串存在这里
let s1 = s.replace("dogs", "cats");
assert_eq!(s1, "I like cats")
} 6、第六题 Q: // 修复所有错误,不要删除任何一行代码
fn main() {
let s1 = String::from("hello,");
let s2 = String::from("world!");
let s3 = s1 + s2;
assert_eq!(s3,"hello,world!");
println!("{}",s1);
} A: // 修复所有错误,不要删除任何一行代码
fn main() {
let s1 = String::from("hello,");
let s2 = String::from("world!");
let s3 = s1.clone() + &s2; //拼接必然是String+&str……,同时拼接后s1丧失所有权,所以这边要用深度拷贝clone来避免后续s1调用失败的情况
assert_eq!(s3,"hello,world!");
println!("{}",s1);
} 7、第七题,两种方法将 Q: // 使用至少两种方法来修复错误
fn main() {
let s = "hello, world";
greetings(s)
}
fn greetings(s: String) {
println!("{}",s)
} A: // 使用至少两种方法来修复错误
fn main() {
let s = "hello, world".to_string();//第一种
greetings(s)
}
fn greetings(s: String) {
println!("{}",s)
} // 使用至少两种方法来修复错误
fn main() {
let s = String::from("hello, world");
greetings(s)
}
fn greetings(s: String) {
println!("{}",s)
} 8、第八题, Q: // 使用两种方法来解决错误,不要新增代码行
fn main() {
let s = "hello, world".to_string();
let s1: &str = s;
} A: //第0种,一开始就不要让String出现(狗头)
fn main() {
let s = "hello, world";
let s1: &str = s;
} // 第一种:as_str
fn main() {
let s = "hello, world".to_string();
let s1: &str = s.as_str();
} //第二种,切片
fn main() {
let s = "hello, world".to_string();
let s1: &str = &s[..];
} //第三种,引用
fn main() {
let s = "hello, world".to_string();
let s1: &str = &s;
} 9、第九题,字符串转义 Q: fn main() {
// 你可以使用转义的方式来输出想要的字符,这里我们使用十六进制的值,例如 \x73 会被转义成小写字母 's'
// 填空以输出 "I'm writing Rust"
let byte_escape = "I'm writing Ru\x73__!";
println!("What are you doing\x3F (\\x3F means ?) {}", byte_escape);
// 也可以使用 Unicode 形式的转义字符
let unicode_codepoint = "\u{211D}";
let character_name = "\"DOUBLE-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);
} A: fn main() {
// 你可以使用转义的方式来输出想要的字符,这里我们使用十六进制的值,例如 \x73 会被转义成小写字母 's'
// 填空以输出 "I'm writing Rust"
let byte_escape = "I'm writing Ru\x73\x74!";
println!("What are you doing\x3F (\\x3F means ?) {}", byte_escape);
// 也可以使用 Unicode 形式的转义字符
let unicode_codepoint = "\u{211D}";
let character_name = "\"DOUBLE-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);
} 10、 Q: /* 填空并修复所有错误 */
fn main() {
let raw_str = r"Escapes don't work here: \x3F \u{211D}";
// 修改上面的行让代码工作
assert_eq!(raw_str, "Escapes don't work here: ? ℝ");
// 如果你希望在字符串中使用双引号,可以使用以下形式
let quotes = r#"And then I said: "There is no escape!""#;
println!("{}", quotes);
// 如果希望在字符串中使用 # 号,可以如下使用:
let delimiter = r###"A string with "# in it. And even "##!"###;
println!("{}", delimiter);
// 填空
let long_delimiter = __;
assert_eq!(long_delimiter, "Hello, \"##\"")
} A: /* 填空并修复所有错误 */
fn main() {
let raw_str = "Escapes don't work here: \x3F \u{211D}";
// 这边需要删除r使得字符码被识别
assert_eq!(raw_str, "Escapes don't work here: ? ℝ");
// 如果你希望在字符串中使用双引号,可以使用以下形式
let quotes = r#"And then I said: "There is no escape!""#;
println!("{}", quotes);
// 如果希望在字符串中使用 # 号,可以如下使用:
let delimiter = r###"A string with "# in it. And even "##!"###;
println!("{}", delimiter);
// 填空
let long_delimiter = "Hello, \"##\"";//在双引号之前加\转义
assert_eq!(long_delimiter, "Hello, \"##\"")
} 11、第十一题,字符串索引 Q: fn main() {
let s1 = String::from("hi,中国");
let h = s1[0]; // 修改当前行来修复错误,提示: `h` 字符在 UTF-8 格式中只需要 1 个字节来表示
assert_eq!(h, "h");
let h1 = &s1[3..5];// 修改当前行来修复错误,提示: `中` 字符在 UTF-8 格式中需要 3 个字节来表示
assert_eq!(h1, "中");
} A: fn main() {
let s1 = String::from("hi,中国");
let h = &s1[0..1]; //切片大小为1
assert_eq!(h, "h");
let h1 = &s1[3..6];// 修改当前行来修复错误,提示: `中` 字符在 UTF-8 格式中需要 3 个字节来表示
assert_eq!(h1, "中");
} 12、第十二题,操作UTF-8字符串 Q: fn main() {
// 填空,打印出 "你好,世界" 中的每一个字符
for c in "你好,世界".__ {
println!("{}", c)
}
} A: fn main() {
// 填空,打印出 "你好,世界" 中的每一个字符
for c in "你好,世界".chars() {
println!("{}", c)
}
}
//打印的结果是:
/*
你
好
,
世
界
*/ 如果是调用 |
Beta Was this translation helpful? Give feedback.
-
done--2023/12/10 |
Beta Was this translation helpful? Give feedback.
-
第十题的填空 let long_delimiter = r###"Hello,\"##\""###;
println!("{}",long_delimiter);
assert_eq!(long_delimiter, "Hello,\"##\""); 为什打印出来的字符串是 Hello,"##" ,后面的断言却不通过呢 |
Beta Was this translation helpful? Give feedback.
-
doneeeee////// >>>>> nice |
Beta Was this translation helpful? Give feedback.
-
感觉做课后作业的人不多啊。 |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
第三题我出现了一些错误,在Windows平台使用gnu工具链时出现了以下错误: error: could not compile 经过初步排查,似乎是由于s.push('!');引起的(因为我改成s.push_str('!');就可以成功运行了 |
Beta Was this translation helpful? Give feedback.
-
// 使用至少两种方法来修复错误 fn greetings(s: &str) { |
Beta Was this translation helpful? Give feedback.
-
mark finished |
Beta Was this translation helpful? Give feedback.
-
compound-types/string
Learning Rust By Practice, narrowing the gap between beginner and skilled-dev with challenging examples, exercises and projects.
https://zh.practice.rs/compound-types/string.html
Beta Was this translation helpful? Give feedback.
All reactions