Enviado por: Jefferson
« Online: Março 14, 2019, 10:22:10 pm »Exercício 6
Citar
Peça ao usuário para digitar seus dados pessoais (Nome, Endereço, Data de
Nascimento, Cidade, CEP, email), verifique se as informações de Data de
Nascimento, CEP e email fazem sentido, e mostre ao usuário se as informações
estão todas validadas, ou mostre qual(is) informação(ões) está(ão) errada(s).
(use funções existentes na biblioteca string).
Código: C++
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | #include <iostream>#include <strings.h>#include <locale.h> using std::cin;using std::cout;using std::string;//using namespace std; // Este programa usa stoi(), que requer c++11 int main() { setlocale(LC_ALL,""); string nome=""; string dataNasc=""; string endereco=""; string cidade=""; string cep=""; string email=""; cout <<"\nNome: "; getline (cin, nome); cout <<"Data de nascimento (dd/mm/aaaa): "; getline (cin, dataNasc); cout <<"Endereço: "; getline (cin, endereco); cout <<"Cidade: "; getline (cin, cidade); cout <<"CEP (apenas números, sem espaços): "; getline (cin, cep); cout <<"email: "; getline (cin, email); /* Esta é uma validação de email bem básica. Eu apenas verifico se não é vazio, se tem uma "@" e um "." e se "." vem depois de "@" Soluções mais completas costumam usar expressões regulares mas como o requerimento era usar as funções existents na biblioteca string estou usando .at() e .find() */ bool erro=false; if (email =="") erro=true; else{ unsigned int posArroba = email.find('@'); unsigned int posPonto= email.find('.'); if (posArroba==-1 || posPonto==-1) erro=true; if (posArroba > posPonto) erro=true; }; if (erro) cout <<"O formato do email "<< email <<" é inválido.\n"; //Agora eu valido o CEP //estou usando .length() e .at() erro=false; if (cep.length()!=8) erro=true; else{ for (int i=0; i<8;i++){ if (!isdigit(cep.at(i)) ) erro=true; } }; if (erro) cout <<"O formato do CEP "<< cep <<" é inválido.\n"; //Agora eu valido a data de nascimento //estou usando .length() .at() e .substr() erro=false; if (dataNasc.length()!=10) erro=true; else{ /* if (!isdigit(dataNasc.at(0)) ) erro=true; if (!isdigit(dataNasc.at(1)) ) erro=true; if (dataNasc.at(2)!='/') erro=true; if (!isdigit(dataNasc.at(3)) ) erro=true; if (!isdigit(dataNasc.at(4)) ) erro=true; if (dataNasc.at(5)!='/') erro=true; if (!isdigit(dataNasc.at(6)) ) erro=true; if (!isdigit(dataNasc.at(7)) ) erro=true; if (!isdigit(dataNasc.at(8)) ) erro=true; if (!isdigit(dataNasc.at(9)) ) erro=true; */ for (int i=0; i<10;i++){ if (i==2 || i==5) if (dataNasc.at(i)!='/') erro=true; else if (!isdigit(dataNasc.at(i))) erro=true; }; }; // stoi deve ser seguro aqui porque todos os digitos já foram verificados if (!erro){ int dia = stoi(dataNasc.substr(0,2)); int mes = stoi(dataNasc.substr(3,2)); int ano = stoi(dataNasc.substr(6,4)); if (dia>31 || dia==0) erro=true; if (mes>12 || mes==0) erro=true; if (ano>2020) erro=true; }; if (erro) cout <<"O formato da data de Nascimento "<< dataNasc <<" é inválido.\n"; return 0;}; |