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::getline para ler a linha inteira.
  • Usar find('@') e substr para 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

  1. std::getline(std::cin, email) lê toda a linha, inclusive espaços, evitando que cin >> pare no primeiro espaço.
  2. email.find('@') procura o caractere e devolve seu índice, ou std::string::npos se não existir.
  3. A condição pos != std::string::npos garante que só extraímos quando há @.
  4. email.substr(pos + 1) cria uma nova string começando logo após o @.
  5. std::cout imprime 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ça std::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