Fácil Rust

Extraindo o primeiro nome

Enunciado

Dada a string "João Silva", use slices para extrair e imprimir apenas o primeiro nome ("João"). Considere que o nome e o sobrenome são separados por um único espaço.

Requisitos

  • Use &str para armazenar o slice resultante.
  • Imprima exatamente Primeiro nome: João.
  • Não use split(); utilize fatiamento com índices de bytes.

Código inicial

fn main() {
    let nome_completo = "João Silva";
    // seu código aqui
}

Saída esperada

Primeiro nome: João
Ver dica

Encontre a posição do espaço com .find(' ') e use o índice para criar o slice &nome_completo[0..pos].

Mostrar solução
fn main() {
    let nome_completo = "João Silva";
    // Encontra a posição do espaço
    let pos = nome_completo.find(' ').unwrap();
    // Cria um slice do início até o espaço (exclusive)
    let primeiro_nome: &str = &nome_completo[0..pos];
    println!("Primeiro nome: {}", primeiro_nome);
}

Passo a passo

  1. Declaramos nome_completo como &str (string literal).
  2. Usamos .find(' ') para obter a posição do primeiro espaço. O método retorna Option<usize>.
  3. Desembrulhamos com .unwrap() porque sabemos que o espaço existe.
  4. Criamos primeiro_nome como um slice &nome_completo[0..pos], que vai do byte 0 até pos (exclusive).
  5. Imprimimos o resultado.

Por que funciona

&str é um slice de string que referencia uma parte da string original sem copiar os dados. O intervalo 0..pos está em limites de caracteres UTF-8 válidos porque o espaço é um caractere ASCII de 1 byte e todos os caracteres antes dele também são ASCII ou formam sequências válidas.

Erros comuns

  • Esquecer .unwrap(): let pos = nome_completo.find(' '); retorna Option<usize>, e usar pos diretamente em 0..pos causa erro de compilação. Corrija com .unwrap() ou if let.
  • Usar índices fora de limites UTF-8: se o nome tivesse acentos e você usasse um índice fixo, poderia cortar um caractere no meio. Aqui usamos .find() que retorna índice seguro.
  • Tentar modificar o slice: slices são imutáveis por padrão; para modificar, seria necessário uma String mutável.

Outra forma de resolver

Usar split_whitespace().next():

let primeiro_nome = nome_completo.split_whitespace().next().unwrap();

Essa forma é preferível quando a separação pode ter múltiplos espaços ou outros espaços em branco.

Saída esperada

Primeiro nome: João