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

 C++ Discussion :

Recherche dans un tableau find()


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Par défaut Recherche dans un tableau find()
    Bonjour a tous,

    Voila j'ai un tableau de string, contenant des numéros de ports.

    Je cherche a prendre a chaque numéro, et à rechercher si ce numéro existe déja dans mon tableau, car les numéros de ports qui reviennent.

    J'utilise la fonction find() mais cela ne fonctionne pas .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     AnsiString bj = TabPort[y].c_str();
                    if(bj !=' ')
                    {
                            IndexPort = find(TabPort[256].begin(),TabPort[256].end(),bj);
                            if(IndexPort)
                            {
                                    cout<<"trouver";
                            }
                            else
                            {
                                    cout<<"Non trouver";
                            }

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    RTFM

    http://www.cplusplus.com/reference/algorithm/find/

    find ne renvois pas un booléen.

    find renvois : un itérateur sur l'élément trouvé ou un itérateur sur le dernier élément + 1 (= end() )

    Tu dois donc faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(IndexPort != TabPort[256].end() )
              //trouvé
    else
               //non trouvé
    Ici TabPort n'est pas un conteneur donc tu dois faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(IndexPort != TabPort+256 )
              //trouvé
    else
               //non trouvé

    Ensuite que veux-tu faire exactement? Ta méthode ne me semble pas très adaptée.

    Ensuite, je ne pense que tu veux chercher ta chaîne de caractère parmi l'ensemble des strings contenu dans ton tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IndexPort = find(TabPort,TabPort+256,bj);
    Et met bien comment tu défini les variables que tu utilises.
    TabPort est-il bien un tableau de string ou un vector de string?

  3. #3
    Membre confirmé
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Par défaut
    En gros, je veux vérifier qu'un élement du tableau n'apparait qu'une fois dans le tableau.

    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
     
            int cpt = TabPort[256].size();
     
            for(int y=0;y<=cpt;y++)
            {
                    string::iterator IndexPort;
                    string::iterator Debut = TabPort[256].begin();
     
                    AnsiString bj = TabPort[y].c_str();
                    if(bj !=' ')
                    {
                            IndexPort = find(Debut,TabPort[256].end(),bj);
                            if(IndexPort!=TabPort[256].end())
                            {
                                    cout<<"trouver";
                            }
                            else
                            {
                                    cout<<"Non trouver";
                            }

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Vu avec lui sur le chat, gros problème de compréhension de ce qu'est un itérateur et algo pas correct
    En cours de correction

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Pour ceux qui poserait la même question, voici le code corrigé et compilable sur des données de test
    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
    35
    36
    37
    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
     
    using namespace std;
     
    int main()
    {
        const char* init[] =  { "1", "2", "3", "2", "4", "3" };
        vector<string> TabPort(init, init+6);
     
        vector<string>::iterator it;
     
        vector<string>::iterator start;
     
        start = TabPort.begin();
        for (it = TabPort.begin();it != TabPort.end();++it)
        {
            ++start;
            // itérateur faisant référence au string trouvé ou à end()
            vector<string>::iterator trouve;
     
            trouve = find (start, // on commence la recherche à partir de start
                           TabPort.end(), // on arrête à la fin du tableau
                           *it); // on cherche la string à laquelle fait référence it
     
            if (trouve != TabPort.end())
            {
                cout << *it << " trouvé:" << *trouve << endl;
            }
            else
            {
                cout << *it << " non trouvé:" << endl;
            }
        }
    }

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Si les éléments du tableau sont des nombres, c'est une hérésie de les stocker et de les rechercher sous forme de string.

    Utilie un std::set<unsigned int>.

  7. #7
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Citation Envoyé par oodini Voir le message
    Si les éléments du tableau sont des nombres, c'est une hérésie de les stocker et de les rechercher sous forme de string.

    Utilie un std::set<unsigned int>.
    non, ce sont bien des string. C'est pour les tests que j'ai mis des nombres, mais ça change rien

    @atum25
    Par contre, la remarque de oodini est juste, si tes string contiennent des données structurées (par exemple des adresses IP) il est peut être mieux de créer une structure spécifique, avec conversion string -> struct et un opérateur d'égalité. A toi de voir en fonction des données manipulées

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    non, ce sont bien des string. C'est pour les tests que j'ai mis des nombres, mais ça change rien
    Ben, si je me réfère au message original :

    "Voila j'ai un tableau de string, contenant des numéros de ports."

  9. #9
    Membre confirmé
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Par défaut
    Comment faire pour utiliser std::set ?

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::set<unsigned int> monSet;
     
    monSet.insert(21);
    monSet.insert(80);
    monSet.insert(21);   // ne fait rien

  11. #11
    Membre confirmé
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Par défaut
    Mais pour rechercher après ?

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Quel est le but, au final ?

    Précise comment tu veux utiliser tes données.

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. [Tableaux] recherche dans un TABLEAU
    Par dunbar dans le forum Langage
    Réponses: 3
    Dernier message: 15/08/2006, 00h06
  2. [VBA-E]Recherche dans un tableau
    Par Zebulon777 dans le forum Macros et VBA Excel
    Réponses: 49
    Dernier message: 05/07/2006, 10h35
  3. Recherche dans un tableau
    Par Bes74 dans le forum Access
    Réponses: 5
    Dernier message: 04/07/2006, 17h26
  4. [VBA-E] recherche dans un tableau
    Par tibss dans le forum Macros et VBA Excel
    Réponses: 33
    Dernier message: 03/05/2006, 17h52
  5. URGENt: recherche dans un tableau trié par ordre alphabetiqu
    Par JulPop dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/02/2005, 17h21

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