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 e chars().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

  1. Declaramos texto como &str.
  2. 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.
  3. texto.chars().count() conta os caracteres Unicode, resultando em 8.
  4. 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. Use texto.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 acessar texto[i]: erro de compilação. Prefira chars() ou bytes().

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