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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    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 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    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 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    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++

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