Ce face char
char ține exact un „scalar Unicode”: o literă din orice alfabet, o cifră, un semn sau un emoji simplu. Se scrie între apostrofuri ('a', 'ș', '€'); ghilimelele ("a") dau un text &str, nu un char. În memorie un char ocupă întotdeauna 4 octeți, chiar dacă în UTF-8, într-un String, ocupă între 1 și 4.
Primești char-uri când parcurgi un text cu chars(). Metodele lui verifică felul caracterului (is_alphabetic, is_numeric, is_whitespace), schimbă litera mare/mică (to_uppercase) sau îl transformă în cifră (to_digit). Codul Unicode se află cu c as u32, iar drumul invers cu char::from_u32.
Se poate scrie un caracter și după cod: '\u{0219}' este ș. Caracterele speciale au forme scurte: '\n', '\t', '\'', '\\'.
Parametri
| Parametru | Descriere |
|---|---|
'x' |
Literal de caracter, între apostrofuri. |
'\u{...}' |
Caracter dat prin codul Unicode în hexazecimal (1–6 cifre). |
Ce returnează
Un char este o valoare simplă, care se copiază (implementează Copy).
Exemple
Exemplul 1: Caractere, coduri și dimensiuni
fn main() {
for c in ['a', 'ș', 'Ț', '€', '🦀'] {
println!("{c} U+{:04X} octeți în UTF-8: {}", c as u32, c.len_utf8());
}
println!("char ocupă {} octeți în memorie", std::mem::size_of::<char>());
println!("{}", '\u{0219}');
}
Rezultat
a U+0061 octeți în UTF-8: 1
ș U+0219 octeți în UTF-8: 2
Ț U+021A octeți în UTF-8: 2
€ U+20AC octeți în UTF-8: 3
🦀 U+1F980 octeți în UTF-8: 4
char ocupă 4 octeți în memorie
ș
Exemplul 2: Clasificarea caracterelor dintr-un text
fn main() {
let text = "Bună! Am 3 mere.";
let (mut litere, mut cifre, mut spatii, mut altele) = (0, 0, 0, 0);
for c in text.chars() {
if c.is_alphabetic() {
litere += 1;
} else if c.is_numeric() {
cifre += 1;
} else if c.is_whitespace() {
spatii += 1;
} else {
altele += 1;
}
}
println!("litere: {litere}, cifre: {cifre}, spații: {spatii}, altele: {altele}");
}
Rezultat
litere: 10, cifre: 1, spații: 3, altele: 2
Greșeli frecvente
- Scrii
'ab'sau'Iași': un literalcharpoate conține un singur caracter. Pentru texte folosește ghilimele. - Compari un
charcu un text:c == "a"nu compilează (expected `char`, found `&str`). Scriec == 'a'. - Crezi că orice „literă de pe ecran” este un
char. Emoji compuse (👨👩👧, steaguri) sunt mai multechar-uri lipite.
Comenzi înrudite
str::chars: Parcurge textul caracter cu caracter (char Unicode), nu octet cu octet. Cu count() afli numărul de litere.char::len_utf8: Câți octeți ocupă caracterul când este scris în UTF-8, adică într-un String: între 1 și 4.char::from_u32: Creează un char din codul lui Unicode, dacă este valid; altfel returnează None.char::is_alphabetic: Verifică dacă un caracter este literă (is_alphabetic) sau literă ori cifră (is_alphanumeric), după Unicode.String: Textul care îți aparține și se poate modifica: UTF-8, pe heap, crește singur. Diferența față de &str.