Questões - String and &str
01 - Escreva um código que crie uma string vazia e a imprima.
Resposta
fn main() { let cria_string: String = String::new(); println!("{}", cria_string); }
02 - Crie uma string a partir do literal de string "Pequeno, texto!".
Resposta
fn main() { let literal_string: String = String::from("Pequeno, texto!"); println!("{}", literal_string); }
03 - Declare uma variável que contenha &str com o valor "Aprendendo Rust".
Resposta
fn main() { let texto: &str = "Aprendendo Rust"; println!("{}", texto); }
04 - Dada uma string, escreva o código para obter um &str que represente toda a string.
Resposta
fn main() { let entrada_string: String = String::from("Aprendendo Rust!"); let entrada_str: &str = &entrada_string; println!("{}", entrada_str); }
fn main() { let entrada_string: String = String::from("Aprendendo Rust!"); let entrada_str: &str = entrada_string.as_str(); println!("{}", entrada_str); }
05 - Escreva um código que receba um texto em string e o converta para &str e, em seguida, o imprima na tela.
Resposta
use std::io; fn main() { println!("Entre com texto:"); let mut entrada_string: String = String::new(); io::stdin() .read_line(&mut entrada_string) .expect("Erro de entrada de dados!"); let texto_string: &str = entrada_string.as_str(); println!("\nTexto convertido para &str: {}", texto_string.trim()); }
06 - Converta um string = 123 em um inteiro.
Resposta
fn main() { let text: &str = "123"; let num: u8 = text.parse().expect("Erro ao converter dados!"); println!("{}", num); }
fn main() { let text: &str = "123"; let num = match text.parse::<u8>() { Ok(num) => num, Err(_) => { println!("Erro ao converter dados!"); return; } }; println!("{}", num); }
07 - Use o método .to_string() ou String::from() para criar uma nova string concatenando um &str e uma string existente.
Resposta
use std::io; fn main() { println!("Entre com texto:"); let mut entrada_texto: String = String::new(); io::stdin() .read_line(&mut entrada_texto) .expect("Erro de entrada de dados!"); let texto_a: &str = &entrada_texto.as_str().trim(); let texto_b: String = String::from(" + string!"); println!("{}", texto_a.to_string() + &texto_b); }
08 - Crie uma string mutável e anexe um &str a ela usando o método push_str().
Resposta
fn main() { let mut string_mutavel: String = String::from("Pequeno, "); string_mutavel.push_str("texto!"); println!("{}", string_mutavel); }
09 - Adicione um único caractere (char) ao final de uma string mutável.
Resposta
fn main() { let mut unico_char: String = String::from("Pequeno, texto"); let caractere: char = '!'; unico_char.push(caractere); println!("{}", unico_char); }
10 - Combine um &str, uma string e um número em uma nova string usando a macro format!.
Resposta
fn main() { let var_str: &str = "1"; let var_string: String = String::from("2"); let var_u8: u8 = 3; // a macro format! cria uma nova string let result = format!("{}{}{}", var_str, var_string, var_u8); println!("{}", result); }
11 - Crie uma nova string removendo todos os espaços em branco de uma string.
Resposta
use std::io; fn main() { println!("Entre com texto:"); let mut entrada_texto: String = String::new(); io::stdin().read_line(&mut entrada_texto).err(); let remove_espaco = entrada_texto.replace(" ", ""); println!("\nSem espaços = {}", remove_espaco.trim()); }
12 - Substitua todas as ocorrências da substring erro por sucesso em um &str, criando uma nova string.
Resposta
use std::io; fn main() { println!("Entre com texto:"); let mut entrada_texto: String = String::new(); io::stdin().read_line(&mut entrada_texto).err(); let novo_texto = entrada_texto.replace("erro", "sucesso"); println!("{}", novo_texto); }
13 - Substitua apenas a primeira ocorrência de antes por depois em um &str, criando uma nova string.
Resposta
use std::io; fn main() { println!("Entre com uma frase:"); let mut entrada_frase: String = String::new(); io::stdin().read_line(&mut entrada_frase).err(); let frase = entrada_frase.replacen("antes", "depois", 1); println!("{}", frase); }
14 - Verifique se um &str contém a substring Rust.
Resposta
use std::io; fn main() { println!("Entre com uma frase:"); let mut entrada_texto: String = String::new(); io::stdin().read_line(&mut entrada_texto).err(); if entrada_texto.contains("Rust") { println!("\n{} - contém 'Rust'", entrada_texto.trim()); } else { println!("\n{} - não contém 'Rust'", entrada_texto.trim()); } }
15 - Verifique se um nome de arquivo em uma string termina com o sufixo .rs
Resposta
use std::io; fn main() { println!("Entre com o nome do arquivo:"); let mut entrada_texto: String = String::new(); io::stdin().read_line(&mut entrada_texto).err(); if entrada_texto.trim().ends_with(".rs") { println!("\n{} - termina com '.rs'", entrada_texto.trim()); } else { println!("\n{} - não termina com '.rs'", entrada_texto.trim()); } }
16 - Verifique se um &str começa com o prefixo https://.
Resposta
use std::io; fn main() { println!("Entre com link:"); let mut entrada_link: String = String::new(); io::stdin().read_line(&mut entrada_link).err(); if entrada_link.starts_with("https://") { println!("\n{} - começa com 'https://'", entrada_link.trim()); } else { println!("\n{} - não começa com 'https://'", entrada_link.trim()); } }
17 - Crie um código que receba uma string e retorne uma fatia contendo apenas a primeira palavra. Assuma que as palavras são separadas por espaços.
Resposta
use std::io; fn main() { println!("Entre com uma frase:"); let mut entrada_frase: String = String::new(); io::stdin().read_line(&mut entrada_frase).err(); let frase = entrada_frase.split_whitespace().next(); println!("{}", frase.unwrap()); }
18 - Encontre o índice de byte inicial da primeira ocorrência da substring rust.
Resposta
use std::io; fn main() { println!("Entre com a frase:"); let mut entrada_frase: String = String::new(); io::stdin().read_line(&mut entrada_frase).err(); if let Some(indice) = entrada_frase.find("rust") { println!("\nÍndice de bytes: {}", indice); } else { println!("\nNão tem: rust"); } }
19 - Escreva uma função que aceite uma string e retorne seu primeiro caractere como um char.
Resposta
use std::io; fn main() { println!("Entre com a palavra:"); let mut entrada_palavra: String = String::new(); io::stdin().read_line(&mut entrada_palavra).err(); let primeira_letra: char = entrada_palavra.trim_start().chars().next().unwrap_or(' '); println!("Primeira letra = {}", primeira_letra); }
20 - Escreva um código que conte o número de caracteres (char) em um &str, não o número de bytes.
Resposta
use std::io; fn main() { println!("Entre com uma palavra:"); let mut entrada_palavra: String = String::new(); io::stdin().read_line(&mut entrada_palavra).err(); let palavra = entrada_palavra.trim().replace(" ", ""); println!("{}", palavra); println!("{:?}", palavra.chars().count()); }
21 - Escreva um código que receba um &mut string e substitua todos os caracteres a minúsculos por A maiúsculos, modificando a string original.
Resposta
use std::io; fn main() { println!("Entre com uma frase:"); let mut entrada_frase: String = String::new(); io::stdin().read_line(&mut entrada_frase).err(); let frase = entrada_frase.trim().replace("a", "A"); println!("{}", frase); }
22 - Escreva um código que remova o último caractere de uma string.
Resposta
use std::io; fn main() { println!("Entre com texto:"); let mut entrada_palavra: String = String::new(); io::stdin() .read_line(&mut entrada_palavra) .expect("Erro de entrada de dados!"); let mut palavra: String = entrada_palavra.trim_end().to_string(); palavra.pop(); println!("{}", palavra); }
23 - Use o método .clear() para limpar uma string sem desalocar sua capacidade de memória.
Resposta
fn main() { let mut var_string: String = String::with_capacity(50); var_string.push_str("Pequeno, grande texto!"); println!("String = {}", var_string); println!("Capacidade = {}", var_string.capacity()); println!("Tamanho = {}", var_string.len()); println!(""); var_string.clear(); println!("String = {}", var_string); println!("Capacidade = {}", var_string.capacity()); println!("Tamanho = {}", var_string.len()); }