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

MFC Discussion :

Test d'appartenance d'un CString dans une liste


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Par défaut Test d'appartenance d'un CString dans une liste
    Bonjour,

    voilà, je voudrais connaitre les méthodes pour tester si un CString correspond à un des CString d'une liste.

    EX:
    Vérifier si s_test (CString) est parmi la liste suivante "nom1", "nom2", "nom3" ...

    J'avais dans l'idée de créer le CString suivant :

    listeString = "nom1;nom2;nom3"; (je pouvais utiliser n'importe quel séparateur) et d'utiliser la méthode .Find comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CString s_test, listeString;
     
    ...
     
    listeString = "nom1;nom2;nom3";
     
    if(listeString.Find(s_test) > -1)
    ...
    Mais surement qu'il y a mieux, c'est pour cela que j'ai besoin de vous.

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut
    tu peux utiliser une table de hashage de la stl (extension)
    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
     
    #include <string>
    #include <hash_set>
    // la table 
        stdext::hash_set<std::string> hsString;
     
    // insertion de la liste.
        std::string s="essai";
        hsString.insert(s);
        s="essai2";
        hsString.insert(s);
        s="essai3";
        hsString.insert(s);
     
    // l'iterateur
        stdext::hash_set <std::string> :: const_iterator hashIt;
     
    // la recherche d'un element.
        hashIt=hsString.find("essai2");
     
        if(hashIt!=hsString.end())
        {
            TRACE("\nfind");
        }
    l'avantage c'est un temps d'accès constant pour les éléments et il n'est pas nécessaire qu'ils soient ordonnés.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Pour rester 100% MFC, il y a la CStringList et sa méthode Find

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Si la vitesse de recherche n'est pas un critère oui : la liste n'est pas indexée.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par farscape Voir le message
    Si la vitesse de recherche n'est pas un critère oui : la liste n'est pas indexée.
    Effectivement, c'était surtout pour rester dans une solution 100% MFC.
    [troll]: si la vitesse est un critère, alors éviter les MFC[/troll].

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Par défaut
    Merci pour vos réponses, la vitesse ne sera pas un probleme, puisqu'il n'y a que 3 ou 4 éléments dans cette liste.

    Enfin je voulais juste savoir si il était possible de déclarer une table de hashage ou une CList en constante globale, c'est à dire une seule fois dans une classe et que l'on puisse l'utiliser dans d'autres classes ? (avec extern, peut etre mais je suis pas sûr et je sais pas si il y a mieux)

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,;
    tu peux éventuellement déclarer ta table dans la classe d'application.
    il suffira dans ton source de déclarer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    extern CMYApp theApp;
     
    theApp.MyList.Find(_T("toto"));

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Par défaut
    Merci beaucoup à vous pour vos aides toujours aussi précieuses.

  9. #9
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    tu peux aussi utiliser le pattern singleton.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Test de présence d'un champ dans une table
    Par lodan dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 14/03/2007, 17h46
  2. comment afficher un CString dans une boite de dialog?
    Par meera dans le forum Visual C++
    Réponses: 22
    Dernier message: 04/11/2006, 12h04
  3. Réponses: 2
    Dernier message: 20/06/2006, 08h22
  4. Réponses: 11
    Dernier message: 08/02/2006, 22h31
  5. Test de l'existence d'enrgistrements dans une table.
    Par Aurèl90 dans le forum Access
    Réponses: 1
    Dernier message: 29/09/2005, 11h17

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