如何在 Rust 中使字符 (char) 大写
How to make a Character (char) uppercase in Rust
沙沙声中,在`iterators2.rs'中,我需要将单词的首字母大写
这是我的代码
pub fn capitalize_first(input: &str) -> String {
let mut c = input.chars();
return match c.next() {
None => String::new(),
Some(first) => first.to_uppercase(),
};
}
我遇到的问题是
--> exercises/standard_library_types/iterators2.rs:13:24
|
11 | return match c.next() {
| ____________-
12 | | None => String::new(),
| | ------------- this is found to be of type `String`
13 | | Some(first) => first.to_uppercase(),
| | ^^^^^^^^^^^^^^^^^^^^- help: try using a conversion method: `.to_string()`
| | |
| | expected struct `String`, found struct `ToUppercase`
14 | | };
| |_____- `match` arms have incompatible types
error: aborting due to previous error
For more information about this error, try `rustc --explain E0308`.
为什么 char.to_uppercase() return 结构 ToUppercase
而不是大写的字符?
原因是我们身处一个大世界,Rust 字符串是用 UTF-8 编码的,允许不同的语言和字符被正确编码。在某些语言中,一个小写字母可能是一个字符,但它的大写形式是两个字符。
因此,char.to_uppercase()
return 必须收集迭代器才能获得适当的结果。
Some(first) => first.to_uppercase().collect()
应该可以解决这个问题
ToUppercase
是一个迭代器,因为字符的大写版本可能由几个代码点组成,正如 delnan 在注释中指出的那样。您可以将其转换为 Vector
个字符:
c.to_uppercase().collect::<Vec<_>>();
沙沙声中,在`iterators2.rs'中,我需要将单词的首字母大写
这是我的代码
pub fn capitalize_first(input: &str) -> String {
let mut c = input.chars();
return match c.next() {
None => String::new(),
Some(first) => first.to_uppercase(),
};
}
我遇到的问题是
--> exercises/standard_library_types/iterators2.rs:13:24
|
11 | return match c.next() {
| ____________-
12 | | None => String::new(),
| | ------------- this is found to be of type `String`
13 | | Some(first) => first.to_uppercase(),
| | ^^^^^^^^^^^^^^^^^^^^- help: try using a conversion method: `.to_string()`
| | |
| | expected struct `String`, found struct `ToUppercase`
14 | | };
| |_____- `match` arms have incompatible types
error: aborting due to previous error
For more information about this error, try `rustc --explain E0308`.
为什么 char.to_uppercase() return 结构 ToUppercase
而不是大写的字符?
原因是我们身处一个大世界,Rust 字符串是用 UTF-8 编码的,允许不同的语言和字符被正确编码。在某些语言中,一个小写字母可能是一个字符,但它的大写形式是两个字符。
因此,char.to_uppercase()
return 必须收集迭代器才能获得适当的结果。
Some(first) => first.to_uppercase().collect()
应该可以解决这个问题
ToUppercase
是一个迭代器,因为字符的大写版本可能由几个代码点组成,正如 delnan 在注释中指出的那样。您可以将其转换为 Vector
个字符:
c.to_uppercase().collect::<Vec<_>>();