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
&strpara 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
- Declaramos
nome_completocomo&str(string literal). - Usamos
.find(' ')para obter a posição do primeiro espaço. O método retornaOption<usize>. - Desembrulhamos com
.unwrap()porque sabemos que o espaço existe. - Criamos
primeiro_nomecomo um slice&nome_completo[0..pos], que vai do byte 0 atépos(exclusive). - 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(' ');retornaOption<usize>, e usarposdiretamente em0..poscausa erro de compilação. Corrija com.unwrap()ouif 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
Stringmutá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