IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Egalité entre chaine de caractère


Sujet :

Qt

  1. #1
    Invité
    Invité(e)
    Par défaut Egalité entre chaine de caractère
    Bonjour,

    Voila je suis entrain de développer un petit programme qui test le contenu d'une lineEdit par rapport à une chaine de caractère.

    Pour le moment je n'utilise pas de lineEdit donc j'ai déclaré une variable de type QString dont je déclare le conteu en dur dans le source !

    Mon problème c'est que lorsque je test les deux variables, leur contenus sont bien égaux mais lorsque je test avec un if() sa ne marche pas !

    J'ai lu quelque part qu'apparament lors d'un tel test ce n'est pas le contenu qui est tester mais l'adresse en mémoire

    Pour le moment je n'ai pas trouver de solution mais si l'un d'entre vous aurait un embryon d'idée se serait le bien venu !

    Voici mon code source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <string>
    #include <iostream>
     
    void Form1::init()
    {
        QString a="veux \0";
        QString b="avoir\0";
        QString d="'";
        QString c=d+a+b+d;
     
       const char* e=(const char*) c;
       const char* az="'veux avoir'";
       std::cout<<e<<"\n";
       std::cout<<az<<"\n";
       if(az==e)
       {
           printf("Succes az=e \n");
       }
       else printf( "Echec \n");
    }
    Merci de votre aide

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Bonjour.
    Citation Envoyé par jeanjean8501 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ... 
       const char* e=(const char*) c;
       const char* az="'veux avoir'";
     
       if(az==e)
    ...
    La oui tu test la valeur de deux pointeur!!!!!
    Pourquoi n'utilise tu pas les QString????

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci de ton aide !

    En faite je n'utilise pas deux QString car par la suite je souhaite pouvoir tester le contenu d'une lineEdit par rapport au contenu d'un champ d'une table MySql ! Et vu que le type du contenu d'une table MySql est const char* c'est pour cela que je n'utilise pas que des QString !

    En faite vu qu'au début je n'arrivai pas a tester le cas précédent je me suis rabattu sur un exemple simple !

    Sinon voici le source ( un peu usine a gaz ) du programme qui est censé tester le contenu du champ d'une table !


    Récupérage du contenu des lineEdits

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    void Form1::Connection()
    {
        QString i_logi = lineEdit1_1->text().latin1();
        QString i_pwdi= lineEdit1_2->text().latin1();               
        const char* i_log=(const char*) i_logi;
         const char* i_pwd=(const char*) i_pwdi;
     
        if ( connection->ConnectionBdd ()==true )  // Test de la connection avec la bdd 
        {
    	if ( connection->Verification (i_log,i_pwd)==true )	
    	{
    	    Form3 *w =new Form3(this); // Création d'un objet de type Form qui pointe sur lui meme
    	    w->show(); // On affiche la Form
    	}
    	else
    	{
    	    textLabel1_4->setEnabled(true);
    	    connection->DeconnectionBdd ();
    	}
        }
    }

    Vérification

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    bool CMysql::Verification(const char *login, const char *pass)
    {
     
        int nbligne,rep;
        bool autorisation=false;
        char *requete="select * from user";
     
        mysql_select_db(bdd,"projet");
     
        rep = mysql_real_query (bdd, requete, (unsigned int) strlen (requete));
        resultat = mysql_store_result (bdd);
        nbligne = mysql_num_rows (resultat);
        lignes = mysql_fetch_row (resultat);   
     
        for(int i=0; i<nbligne; i++)
        {
    	if  ( ( lignes[1]== login ) || ( lignes[2]==pass ) )
    	{
    	    printf("SUCCES\n");
    	    printf("Login : %s, champ : %s\n",login,lignes[1]);
    	    printf("Pass : %s, champ : %s\n",pass,lignes[2]);
    	    autorisation=true;
    	}
    	else if ( ( lignes[1]!=login ) && ( lignes[2]!=pass ) )
    	{
    	    printf("ERREUR\n");
    	    printf("Login : %s, champ : %s\n",login,lignes[1]);
    	    printf("Pass : %s, champ : %s\n",pass,lignes[2]);
    	    autorisation=false;
    	}
        }
        mysql_free_result (resultat); // Pour libérer la mémoire
        return autorisation;
    }
    Merci de votre aide !

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    oula...
    ca c'est faux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QString i_logi = lineEdit1_1->text().latin1();
    QString i_pwdi= lineEdit1_2->text().latin1();               
    const char* i_log=(const char*) i_logi;
    const char* i_pwd=(const char*) i_pwdi;

    au pire tu fait ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const char* i_log=(const char*) lineEdit1_1->text().latin1();
    const char* i_pwd=(const char*)  lineEdit1_2->text().latin1();
    et tu compare tes chaînes de caractère avec strcmp()...
    http://c.developpez.com/faq/?page=st...STRINGS_strcmp


    mais avec QString c'est beaucoup plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <QtGui>
    #include <iostream>
    int main(int argc, char* argv[])
    {
    QString s ("test a");
     
    if (s == "test a") std::cout<<"cool"<<std::endl;
    else   std::cout<<"bad"<<std::endl;
     
    if (s == "test b") std::cout<<"cool"<<std::endl;
    else   std::cout<<"bad"<<std::endl;
     
    return 0;
    }

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jeanjean8501 Voir le message
    Merci de ton aide , je vais chercher dans cette direction et si j'ai un problème je reposterai en conséquence

    Merci sa marche impequable avec la fonction strcmp()

    Je te remercie grandement

    J'aurai dut rechercher aussi dans la FAQ C car je m'était limité à celle du C++ !!!

    Bye

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par jeanjean8501 Voir le message
    Merci sa marche impequable avec la fonction strcmp()

    Je te remercie grandement

    J'aurai dut rechercher aussi dans la FAQ C car je m'était limité à celle du C++ !!!

    Bye
    Si tu veut pas utiliser les QString. Tu devrait au moins utiliser les std::string. C'est beaucoup plus propre en C++

  7. #7
    Invité
    Invité(e)
    Par défaut
    okay je vais essayer de voir ça alors

  8. #8
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Qui plus est, je te renvoie à la FAQ Qt (http://qt.developpez.com/faq/) pour voir comment faire le va-et-vient entre QString et std::string.

    Utiliser du C au milieu de tout ça n'a plus ou moins aucun sens.

  9. #9
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Surtout qu'il suffirait d'utiliser le plugin QMySql pour se débarasser totalement de ce genre de souci (encodages, toussa)

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par IrmatDen Voir le message
    Surtout qu'il suffirait d'utiliser le plugin QMySql pour se débarasser totalement de ce genre de souci (encodages, toussa)
    a tes souhaits...

    C'est pas comme si tu lui avez déjà dit

    CMysql c'est une class à toi??

  11. #11
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    C'est pas comme si tu lui avez déjà dit
    Je sais, mais je vois pas pourquoi il s'entête à utiliser une lib qui va augmenter le risque de bug, donc je rajoute une couche pour montrer encore un autre point valable quant à l'utilisation de ce plugin

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour à tous !

    1° - Je ne préfère pas utiliser de plugin Mysql pour Qt pour le moment, en effet je préfère réaliser ce porjet dans un premier temps "basique" sans plugin !

    2° - CMysql est une classe que j'ai faite, elle regroupe les principales fonctionnalités de Mysql !

    3° - J'utilise du c au "milieu de tou ça" car je suis débutant en programmation et je ne voyais que se moyen pour réaliser ces actions !

  13. #13
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Oui mais justement le forum est là pour t'indiquer les bonnes voies.

    La FAQ te donne un début de piste pour les bonnes pratiques et bien évidemment nous t'encourageons à nous poser des questions. Toutefois, la phase de recherche est très importante dans ces situations. Plus tu trouveras des réponses tout seul, plus ça te motivera.

    Dans tous les cas, utiliser du C au milieu d'un code Qt est très déconseillé. La bibliothèque standard du C++ et toutes les classes fournies par Qt te suffiront largement.

    En espérant t'avoir aidé...

  14. #14
    Invité
    Invité(e)
    Par défaut
    Je vais me pencher sur le problème alors

    Et encore merci pour tous vos conseils


    Edit:

    Je viens de modifier le code source ! Maintenant il fait "plus" C++

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    bool CMysql::Verification(const char *login, const char *pass)
    {
        autorisation=false;
        char *requete="select * from user";
     
        mysql_select_db(bdd,"projet");
     
        rep = mysql_real_query (bdd, requete, (unsigned int) strlen (requete));
        resultat = mysql_store_result (bdd);
        nbligne = mysql_num_rows (resultat);
        nCol=mysql_num_fields (resultat); //    
     
        for(int i=0; i<nbligne; i++)
        {
    	lignes=mysql_fetch_row(resultat);
    	    if  (( !strcmp(lignes[3],login )) && (!strcmp( lignes[4],pass ) ))
    	    {
    		cout<<"SUCCES"<<endl;
    		cout<< "Login : " <<login << " champ : "<<lignes[3]<<endl;
    		cout<< "Pass : " <<pass << " champ : "<<lignes[4]<<endl;
    		autorisation=true;
    	    }
    	  else if ( (strcmp(lignes[3],login ) ) && ( strcmp(lignes[4],login ) ) )
    	    {
    		cout<<"ERREUR"<<endl;
    		cout<< "Login : " <<login << " champ : "<<lignes[3]<<endl;
    		cout<< "Pass : " <<pass << " champ : "<<lignes[4]<<endl;
    	    }
          }
    mysql_free_result (resultat); // Pour libérer la mémoire
    return autorisation;
    }
    Dernière modification par Invité ; 06/02/2008 à 16h32.

Discussions similaires

  1. Sauter ligne entre chaine de caractère
    Par cre31400 dans le forum C++
    Réponses: 7
    Dernier message: 09/07/2008, 16h29
  2. Egalité de chaine de caractère et index ?
    Par ctobini dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/02/2008, 15h07
  3. Réponses: 10
    Dernier message: 31/05/2007, 15h10
  4. Entrée a partir d'une chaine de caractère
    Par Spartan03 dans le forum C
    Réponses: 5
    Dernier message: 18/03/2006, 19h48
  5. Matching entre chaines de caractères
    Par shenron666 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 13/10/2005, 16h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo