/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Validador de correo

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
mapachexxx



Registrado: 05 Abr 2014
Mensajes: 2

MensajePublicado: 05/04/2014 9:29 pm
Título: Validador de correo

Hola!!
Necesito hacer un validador de correos que tenga mas de 8 caracteres y que lleve @gmail.com al final que no se pueda repetir ni @ ni el gmail.com y que nada este despues de @gmail.com
esto es lo que llevo ya no se que hacer

#include <iostream>
#include <string.h>


using namespace std;

int main()
{ string email;
string nvalid = "!#$%&/()=?¡,;|_ñ,Ñ";
cout << "Dame tu Email"<<endl;
cin>>email;
int v1=0, v2=0, v3=0, pos, j;



for (j=0; j<=nvalid.length();j++)
{
pos = email.find(nvalid[j]);
if(pos >=0)
{
cout<<"Caracteres Invalidos"<<endl;
break;
}else{v1=1;}
}
pos=email.find("@");
if (pos>7);
{ v2=1;}


pos=email.find("gmail.com");
if (pos>=9)
{ v3=1; }


if (v1==1 && v2==1 && v3==1 && j>=18 ){
cout<<"Es un correo valido de Gmail"<<cont<<endl;
}
else{
cout<<"No es un correo valido de Gmail"<<cont<<endl;
}
return 0;
}



Les agradeceria mucho su ayuda.
Volver arriba
daltomi



Registrado: 28 Abr 2007
Mensajes: 335
Ubicación: Argentina

MensajePublicado: 06/04/2014 12:11 pm
Título:

Buenas.

Una manera de resolverlo, sería así:

* Contar cuantas veces existe el caract. arroba.
-- Permitir continuar si sólo existe una vez.

* Buscar el dominio(gmail.com).
-- Si lo que existe antes del domino es menor que 8 terminar.
-- Si existe al menos 1 caract. después del dominio, terminar.

Ejemplo:
Código:

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
  std::string direccion;
  const std::string dominio("gmail.com");

  std::cout << "Ingrese dirección de correo: ";
  std::cin >> direccion;

  if ( 1 != std::count(direccion.begin(), direccion.end(), '@') )
  {
   std::cout << "Error, @ +1 vez o no existe ninguno." << std::endl;
   // Si quieres determinar cual de los 2 errores, guarda el resultado de count.
     return 0;
  }

  const size_t pos = direccion.find(dominio);

  if ( pos == std::string::npos || // si no encontro el dominio ...
      // .. o si encontro el dominio pero contiene +caracteres: @gmail.comXZY
       (dominio.length() != direccion.end() - (direccion.begin() + pos) )
     )
  {
    std::cout << "Error, dominio no encontrado: " << dominio << std::endl;
  }
  else if ( pos < 8 ) // si lo que sobra es menor que 8
  {
    std::cout << "Error, dirección < 8 caract." << std::endl;
  }
}


Habría que testearlo.
Saludos.
Volver arriba
Dirección AIM
mapachexxx



Registrado: 05 Abr 2014
Mensajes: 2

MensajePublicado: 07/04/2014 10:00 am
Título: Gracias daltomi

Me sirvio de mucho tu ejemplo aqui esta como me quedo


Código:

#include <iostream>
#include <string>
#include <algorithm>


using namespace std;

int main()
{   string email;
    string nvalid = "!#$%&/()=?¡,;|_ñ,Ñ";
    const string dominio("gmail.com");
    cout << "Dame tu Email"<<endl;
    cin>>email;
    int v1=0, v2=0, v3=0, pos, j, i, arr=0;

    for (int i = 0; i < email.length(); i++){
        email[i];
        if (email[i] == char(64)){
            arr++;
        }
    }

    for (j=0; j<=nvalid.length();j++)
    {
        pos = email.find(nvalid[j]);
        if(pos >=0)
        {
            cout<<"Caracteres Invalidos"<<endl;
            break;
        }else{v1=1;}
    }
   pos=email.find("@");
    if (pos>7);
    { v2=1;}


    pos=email.find("gmail.com");
    if (pos>=9)
    { v3=1; }


    if (dominio.length() != email.end() - (email.begin() + pos)){
        cout<<"No es un correo valido de Gmail"<<endl;
    }
    else{


    if (v1==1 && v2==1 && v3==1 && j>=18 && arr==1){
        cout<<"Es un correo valido de Gmail"<<endl;
    }
    else{
        cout<<"No es un correo valido de Gmail"<<endl;
        }
    }
    return 0;
}
[/code]


Smile
Volver arriba
daltomi



Registrado: 28 Abr 2007
Mensajes: 335
Ubicación: Argentina

MensajePublicado: 07/04/2014 4:09 pm
Título:

Algunos detalles.

Podrías reemplazar el bucle para detectar caracteres no válidos por una sola línea con find_first_of.
Nota que si quitas el bucle, j>=18 fallará más adelante.
Código:

 pos = email.find_first_of(nvalid);
 if ( pos != string::npos ) {
   cout << "Caracteres Invalidos" << endl;
 }else{v1=1;}
 


También esto:
Código:

 for (int i = 0; i < email.length(); i++){
       email[i]; <- sin operación.
       ... }
Volver arriba
Dirección AIM
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com