Fácil C++
Extraindo o domínio de um e-mail
Enunciado
Leia uma linha contendo um endereço de e-mail e imprima a parte após o caractere @.
Requisitos
- Usar
std::getlinepara ler a linha inteira. - Usar
find('@')esubstrpara extrair o domínio. - Imprimir apenas o domínio, sem espaços extras.
Código inicial
#include <iostream>
#include <string>
int main() {
std::string email;
std::getline(std::cin, email);
// TODO: encontre o '@' e imprima o domínio
return 0;
}
Saída esperada
exemplo.com
Ver dica
A posição do @ é o índice onde o domínio começa depois dele. Lembre-se de somar 1.
Mostrar solução
#include <iostream>
#include <string>
int main() {
std::string email;
std::getline(std::cin, email); // lê a linha inteira
auto pos = email.find('@'); // posição do '@'
if (pos != std::string::npos) { // verifica se encontrou
std::string dominio = email.substr(pos + 1); // pega após o '@'
std::cout << dominio << '\n';
}
return 0;
}
Passo a passo
std::getline(std::cin, email)lê toda a linha, inclusive espaços, evitando quecin >>pare no primeiro espaço.email.find('@')procura o caractere e devolve seu índice, oustd::string::nposse não existir.- A condição
pos != std::string::nposgarante que só extraímos quando há@. email.substr(pos + 1)cria uma nova string começando logo após o@.std::coutimprime o domínio seguido de quebra de linha.
Por que funciona
find retorna a posição do delimitador e substr copia a parte desejada. Como substr sem segundo argumento vai até o fim, obtemos exatamente o domínio.
Erros comuns
- Usar
std::cin >> email: para no primeiro espaço e pode perder partes do endereço. - Esquecer de somar 1:
substr(pos)incluiria o@no resultado. - Não verificar
npos:substr(npos + 1)lançastd::out_of_range.
Outra forma de resolver
Usar std::string_view para evitar cópia:
std::string_view sv{email};
auto pos = sv.find('@');
if (pos != std::string_view::npos)
std::cout << sv.substr(pos + 1) << '\n';
Saída esperada
exemplo.com