begin process at 2012 05 30 10:36:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

Utilisation strcmp avec tableau


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Utilisation strcmp avec tableau

dimanche 15 novembre 2009 à 12:52:04 | Utilisation strcmp avec tableau

noname001

Bonjour à tous.

Dans le cadre d'un projet que j'ai à réaliser, je dois manipuler la fonction strcmp de cstring.. En effet, j'essaye de l'utiliser pour comparer une chaîne de caractère d'un vecteur avec chaque ligne d'un tableau.


Pour faire simple, mon tableau L[][] se trouve dans une boucle que je n'ai pas mentionnée et reçoit sur chaque ligne une adresse de site.

Il la reçoie de mon vecteur sauvegarde qui lui contient cette adresse. Seulement, il ne faut pas que la même adresse apparaisse plusieurs fois dans mon tableau L.

J'ai donc créée une bool identique initialisé à false.
Ma boucle d'indice k fait varier la ligne de mon tableau pour la comparer à chaque fois à mon vecteur "sauvegarde".
Si le resultat de comparaison de strcmp = 0, alors ma bool devient true et logiquement il ne devrait pas inscrire le contenu de sauvegarde dans mon tableau L.

Seulement à l'éxécution, evidemment tout s'inscrit dans mon tableau et je retrouve plusieurs fois le même lien ...


D'avance merci pour votre aide qui me sauverait la vie je pense


Code C/C++ :
bool identique=false;
                                           int k=0;
                                           while ( k < MAX_NB_LINK )
                                           { 
                                                 resultat = strcmp(L[k],sauvegarde);
                                                 
                                                 if (resultat ==0)//Si les 2 chaînes sont identiques
                                                 {identique=true;}
                                                 
                                                 k++;
                                                 
                                           }
                                           
                                          
                                              
                                             if (identique == false) // Si il ne retrouve pas la même
                                             {                 //chaîne dans le tableau
                                                         int j=0;
                                                         for(j ; sauvegarde[j]!= ' ' ; j++)
                                                         {L[i][j] = sauvegarde[j];}
                                                                                
                                             }
dimanche 15 novembre 2009 à 13:55:47 | Re : Utilisation strcmp avec tableau

rt15

Membre Club Administrateur CodeS-SourceS
Bienvenue,

Désolé, à vu de nez je ne vois pas le souci.

Cependant, je peux déjà te donner un ou deux conseils :

Code C/C++ :
if (identique == false)

Ca fait code débutant. Identique est un booléen. Autant écrire :
Code C/C++ :
if (! identique)


Le code suivant :

Code C/C++ :
int k=0;
while ( k < MAX_NB_LINK )
{
  ...
  k++;
}


Serait bien plus joli sous la forme d'une boucle for.

D'autre part, si tu as (resultat ==0) (Que tu peux aussi écrire (! resultat) bien que c'est moins grave car c'est un entier), tu n'es pas obligé de continuer la comparaison avec les chaînes suivante. Tu sais que c'est un doublon, tu ne l'écrit pas. Donc il faudrait mettre un break après le identique=true;.

Pour la dernière boucle for, tu peux faire un for(int j = 0; sauvegarde[j]!= ' ' ; j++) plutôt que de déclarer et initialiser j avant la boucle.
dimanche 15 novembre 2009 à 20:35:49 | Re : Utilisation strcmp avec tableau

noname001

Pour être plus complet, j'ouvre une page html et je dois faire une recherche de tous les liens se trouvant dans celle-ci et les copier dans mon tableau L sans y retrouver deux fois le même.

J'ai donc une boucle qui fait une recherche caractère par caractère de la balise <a href="..."> et qui stocke l'url dans mon vecteur sauvegarde.. ensuite j'utilise strcmp pour comparer chaque ligne du tableau avec ce vecteur sauvegarde ..

Voici le bout de code s'y rapportant:

Code C/C++ :

 while(fichier.get (lettre) )
                        { if ( lettre == '<' )
                          { fichier.get (lettre);
                            if ( lettre == 'a' or 'A' )
                            { fichier.get (lettre);
                              if ( lettre == ' ' )
                              { fichier.get (lettre);
                                if ( lettre == 'h' or 'H' )
                                { fichier.get (lettre);
                                  if ( lettre == 'r' or 'R' )
                                  { fichier.get (lettre);
                                    if ( lettre == 'e' or 'E' )
                                    { fichier.get (lettre);
                                      if ( lettre == 'f' or 'F' )
                                      { fichier.get (lettre);
                                        if ( lettre == '=' )
                                        { fichier.get (lettre);
                                          if ( lettre == '"' )

                                          { int y=0;
                                          
                                            while (fichier.get (lettre) and lettre != '"')

                                            {     
                                                  
                                                  sauvegarde[y]=lettre;
                                                  y++;
                                                  
                                                  
                                           
                                            }
                                            
                                            //for (int i=0;i<MAX_SIZE_URL;i++)
                                            //{cout << sauvegarde[i];}
                                            
                                           //J'utilise un vecteur sauvegarde 
                                           // pour copier par la suite son
                                           //contenu(url) vers mon tableau L.
                                                                                   //Je réinitialise mon vecteur sauvegarde ensuite pour le
                                           //prochain tour de boucle
                                           
                                           bool identique=false;
                                           
                                           for(int k=0 ; k < MAX_NB_LINK ; k++ ) //compare jusqu'à la dernière ligne du tableau
                                           {                     
                                                 resultat = strcmp(sauvegarde,L[k]);
                                                 
                                                 if (resultat == 0)//Si les 2 chaînes sont identiques
                                                 {
                                                              identique=true;
                                                              break;
                                                 }
                                                 
                                                 
                                                 
                                           }
                                           
                                          
                                              
                                             if (!identique) // Si il ne retrouve pas la même
                                             {                 //chaîne dans le tableau
                                                         int j=0;
                                                         for(j ; j<MAX_SIZE_URL ; j++) 
                                                           {L[i][j] = sauvegarde[j];}
                                                           
                                                         initialisation (sauvegarde);
                                                         i++; // Passe à la ligne suivante du
                                                         //tableau L pour le prochain
                                                         //tour de boucle
                                                         
                                             }
                                                                                      
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        } 



J'essaye tant bien que mal que ça marche mais je ne trouve pas de solution à ce mon problème ..
Une idée ?
Merci à tous!
lundi 16 novembre 2009 à 09:36:25 | Re : Utilisation strcmp avec tableau

rt15

Membre Club Administrateur CodeS-SourceS
Ah je crois que j'ai trouvé finalement.

strcmp fait une comparaison sur des chaînes à zéro terminal. Toi tu travailles sans zéro terminal. Bilan strcmp va au delà de ce que tu considère comme l'URL et trouve donc des différences.

Donc, lors de la récupération de l'URL, ajoute le zéro.

Code C/C++ :
int y = 0 ;
while (fichier.get (lettre) and lettre != '"')

{
  sauvegarde[y] = lettre;
  y++;
}
sauvegarde[y] = 0;


Ainsi, tu vas aussi pouvoir faire un strcpy, pour recopier la chaîne dans L.

Code C/C++ :
if (!identique) // Si il ne retrouve pas la même
{                 //chaîne dans le tableau
  strcpy(L[i], sauvegarde);


Et finalement, une dernière remarque concernant la robustesse de ton programme. En cas de html invalide, si la fin du fichier est une url incomplète, ton programme va planter car il va essayer de lire au delà de la fin du fichier. Faudrait vérifier avec good.
lundi 16 novembre 2009 à 15:56:52 | Re : Utilisation strcmp avec tableau

noname001

Un tout grand merci à toi rt15, c'est marche nickel et j'ai réussi à finir mon projet


Cette discussion est classée dans : tableau, sauvegarde, vecteur, identique, strcmp


Répondre à ce message

Sujets en rapport avec ce message

sauvegarde dans un tableau puis l afficher [ par adidas6767 ] Bonjourvoila mon probleme je ss entrain de cree un jeu et j ai un probleme de sauvegarde de nom et du scoreque je veut mettre dans un tableauvoila le Convertir un tableau de vecteur de String en pointeur [ par fcoutel ] Bonjour, J'ai cree un tableau dynamique a 2D de type string vector> tab,  je voudrais savoir quel est le meilleur moyen de le convertir en char***.M tableau/ vecteur [ par moberol ] Bonjour à tous !je suis debutant en C++, si quelqu'un peux me donner une idée;soit le fichier ci dessous,Module A   (....)intput 2;output <font size fonction qui retourne un vecteur en C/C++ [ par rocketcariboo ] Je voudrais savoir comment on fait une fonction qui prend un tableau et qui retourne un autre tableau. Quelle est la façon la plus simple. Je sais qu' tableau [ par infodaoudi ] bonjour, je veux récupérer le tableau *data à l'exterieure de la fonction readvecteur, comment faire sans utiliser return. Quelqu'un à une idée? merci Problème pour l'utilisation d'un constructeur de recopie [ par vincemail ] Bonsoir à tous, j'ai un petit problème concernant le constructeur de recopie d'une classe, ou plutot son utilisation. Voilà, je crée une classe Vecteu augmenter dynamiquement la taille d'un vecteur 2D [ par snake57 ] Bonjour à tous, je voudrais pouvoir créer dynamiquement un tableau 2D en C++, donc d'après mes recherche c'est les vecteurs qu'il faut utiliser. J'a stockage avec vecteur ou tableau [ par moberol ] Bonjour à tous!si quelqu'un peux  m'aider....je dois réaliser une structure de donnée pour mémoriser(stocké) mots identiques qui se répète tout le lon Mémoriser une chaine de valeur entier répétitif dans un tableau [ par moberol ] Bonjour à tousje suis débutant en C++ si quelqu'un peux m'aider je dois memoriser plusieurs entiers 1,32,36,46,5,60,63,87,97......132 dans un structur dimension constante d'un tableau [ par Skyffer3 ] Bonjour à tous, [^^happy13] Je me pose une question suite à une affirmation de mon livre pour apprendre le C++ : "La dimension d'un tableau ne peut ê


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,281 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales