0
I need help, I’m having problems comparing two variables using strcmp().
[Error] invalid Conversion from 'char' to 'const char*' [-fpermissive]
struct transicao{
int estado; //estado em que o DFA esta
char simbolo; //simbolo usado no DFA
int proxestado; //proximo estado do DFA
};
// Cria uma tabela do tipo transicao e preenche com todos os casos possiveis de serem obtidos no DFA
struct transicao tabela[103][3] = {
//Aqui no codigo original, estao todos os casos possiveis
};
int validar(){
char email[50]; // Armazena o email que deve ser testado
cout<<"Digite o email: ";
cin>>email; // Salva email digitado pelo usuario
fflush(stdin);
char cEmail = email[0];
int count;
int estado;
char simbolo;
int proxestado;
int t = strlen(email);
int j = 0;
while(t > 0){ // O loop dura enquanto existirem caracteres em email
for(count = 0; count < 103; count++){ // A condicao de parada e 103 porque e o numero de casos
estado = tabela[count][0].estado; // Armazena o estado do DFA no momento
simbolo = tabela[count][1].simbolo; // Armazena o simbolo do DFA no momento
proxestado = tabela[count][2].proxestado; // Armazena o proximo estado caso
if(strcmp(cEmail,simbolo) == 0){
//Se o simbolo atual for igual ao caracter do email, entra no switch
switch(estado){
case 0:
// Se o estado e o proximo estado forem 0, significa que o automato
// devera continuar no estado 0
if(estado == 0 && proxestado == 0){
continue;
} else if(simbolo == '@'){ // Se nao for, estado recece proxestado
estado = proxestado;
continue;
}
break;
case 1:
// Se o estado e o proximo estado forem 1, significa que o automato
// devera continuar no estado 1
if(estado == 1 && proxestado == 1){
continue;
} else if(simbolo == '.'){ // Se nao for, estado recece proxestado
estado = proxestado;
continue;
}
break;
case 2:
// Se o estado e o proximo estado forem 2, significa que o automato
// devera continuar no estado 2
if(estado == 2 && proxestado == 2){
continue;
}
break;
} // end switch
j++; // Incrementa o contador que anda entre os caracteres do email
} else {
continue; // Se o simbolo atual for nao igual ao caracter do email, continue testando os próximos
}
} // end for
t--;
} // end while
if(estado != 2) { // Testa se o DFA terminou em um estado diferente de 2
return 0;
}
else return 1;
}
int main(){
int retorno;
retorno = validar();
if(retorno == 1)
cout<<"Email valido!";
else
cout<<"Email invalido!";
system("pause");
}
Voce is comparing characters and not strings. just do
if (cEmail == simbolo)
.– Lucas Virgili
Thank you, buddy!
– lys
If you are using c++ try using standard structures such as
std::string
rather than char[]. This facilitates the implementation of the code and the subsequent understanding of it.– t.pimentel
@Lucasvirgili make it an answer so that it can be accepted and voted on
– Guilherme Bernal
@Guilhermebernal ready :)
– Lucas Virgili