如何在 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<_>>();