Médio Rust
Contando caracteres e bytes
Enunciado
Escreva um programa que receba uma string "Rustação" e imprima quantos bytes e quantos caracteres ela possui. Além disso, itere sobre os caracteres e imprima cada um em uma linha separada.
Requisitos
- Use
len()para contar bytes echars().count()para contar caracteres. - Itere com
chars()e imprima cada caractere. - A saída deve seguir exatamente o formato mostrado em
expected_output.
Código inicial
fn main() {
let texto = "Rustação";
// seu código aqui
}
Saída esperada
Bytes: 10
Caracteres: 8
R
u
s
t
a
ç
ã
o
Ver dica
Lembre-se: len() retorna o número de bytes, enquanto chars().count() retorna o número de caracteres Unicode.
Mostrar solução
fn main() {
let texto = "Rustação";
// Conta bytes (len)
println!("Bytes: {}", texto.len());
// Conta caracteres Unicode
println!("Caracteres: {}", texto.chars().count());
// Itera sobre cada caractere
for c in texto.chars() {
println!("{}", c);
}
}
Passo a passo
- Declaramos
textocomo&str. texto.len()retorna o número de bytes da string. "Rustação" tem 4 letras ASCII (1 byte cada) + 'ç' (2 bytes) + 'ã' (2 bytes) + 'o' (1 byte) = 4 + 2 + 2 + 1 = 9? Na verdade, "Rustação" tem 8 caracteres: R,u,s,t,a,ç,ã,o. Bytes: R(1)+u(1)+s(1)+t(1)+a(1)+ç(2)+ã(2)+o(1) = 10 bytes. Por isso a saída é 10.texto.chars().count()conta os caracteres Unicode, resultando em 8.- O loop
for c in texto.chars()itera sobre cada caractere e imprime um por linha.
Por que funciona
Rust armazena strings como bytes UTF-8. len() retorna o tamanho em bytes, que pode ser maior que o número de caracteres. chars() decodifica a sequência UTF-8 e produz um iterador de char (um valor escalar Unicode). Isso permite manipular texto corretamente sem se preocupar com a codificação.
Erros comuns
- Usar
texto[0]: não compila, pois strings não podem ser indexadas por inteiro. Usetexto.chars().nth(0)ou slices. - Confundir
len()com número de caracteres:len()conta bytes, não caracteres. Para caracteres, use.chars().count(). - Iterar com
for i in 0..texto.len()e acessartexto[i]: erro de compilação. Prefirachars()oubytes().
Outra forma de resolver
Para apenas contar caracteres, poderia usar texto.chars().count(). Para bytes, texto.as_bytes().len() é equivalente a len(). A forma mostrada é a mais idiomática.
Saída esperada
Bytes: 10
Caracteres: 8
R
u
s
t
a
ç
ã
o