Ce face char::to_uppercase
În Unicode, unele litere mari sunt formate din mai multe caractere: ß devine SS. De aceea to_uppercase() nu returnează un char, ci un iterator de caractere. Îl poți afișa direct (implementează Display), îl poți strânge într-un String cu collect() sau poți lua primul caracter cu next().
Pentru literele românești rezultatul este mereu un singur caracter: ș → Ș, ț → Ț. Dacă știi că lucrezi doar cu ASCII, to_ascii_uppercase() returnează direct un char.
Ce returnează
Un iterator (ToUppercase / ToLowercase) cu unul până la trei caractere.
Exemple
Exemplul 1: Iteratorul și cum îl folosești
fn main() {
let c = 'ș';
println!("{}", c.to_uppercase()); // afișare directă
let s: String = 'ß'.to_uppercase().collect();
println!("ß -> {s}");
let m: char = 'Ț'.to_lowercase().next().unwrap();
println!("Ț -> {m}");
println!("ascii: {}", 'q'.to_ascii_uppercase());
}
Rezultat
Ș
ß -> SS
Ț -> ț
ascii: Q
Exemplul 2: Prima literă mare
fn capitalizeaza(cuvant: &str) -> String {
let mut litere = cuvant.chars();
match litere.next() {
Some(prima) => prima.to_uppercase().chain(litere).collect(),
None => String::new(),
}
}
fn main() {
for c in ["ștefan", "țara", "iași", ""] {
println!("{:?}", capitalizeaza(c));
}
}
Rezultat
"Ștefan"
"Țara"
"Iași"
""
Greșeli frecvente
- Scrii
let m: char = c.to_uppercase();:expected `char`, found `ToUppercase`. Adaugă.next().unwrap()sau strânge înString.
Comenzi înrudite
str::to_uppercase: Returnează un String nou cu toate literele mari (to_uppercase) sau mici (to_lowercase), după regulile Unicode.char::is_uppercase: Verifică dacă un caracter este literă mare (is_uppercase) sau literă mică (is_lowercase).str::to_ascii_uppercase: Returnează o copie în care doar literele ASCII a-z devin mari; diacriticele și alte caractere rămân neschimbate.