C/C++ - Error comparing char with strcmp()

Asked

Viewed 1,060 times

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");

}
  • 3

    Voce is comparing characters and not strings. just do if (cEmail == simbolo).

  • Thank you, buddy!

  • 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.

  • @Lucasvirgili make it an answer so that it can be accepted and voted on

  • @Guilhermebernal ready :)

1 answer

1


You are comparing characters and not strings. Just do if (cEmail == simbolo).

Browser other questions tagged

You are not signed in. Login or sign up in order to post.