Comparaison chaine de caractere

Fermé
lechat - 8 déc. 2008 à 15:11
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 8 déc. 2008 à 15:58
Bonjour.

Je voudrais savoir si une chaine de caractere chaine1 se trouve dans un tableau de chaine de caractere *chaine2[]. pour verifier cela j'ai fait un algo .

Mais il est faux puisqu'a chaque fois que les chaine comparées ne seront pas identiques la fonction me renverra un -1. voyez l'algorithme:

for(i=0;i<27;i++)
if (strcmp(chaine1, chaine2[i]) == 0){ return 0;}
else { return -1;}

je me suis donc dis qu'il fallait que je mette une condition avec un while mais je n'arrive pas à l'exprimer correctement sans que mon systeme boucle à l'infini.Auriez vous une aide à m'apporter? merci d'avance.
A voir également:

2 réponses

xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
8 déc. 2008 à 15:18
Bonjour

Il faut mettre des {} pour le for sinon il ne test que la derniere valeur de i...
et il faut faire le return -1 après la boucle for sinon dès le premier test il va sortir de ta fonction à cause du return..

for(i=0;i<27;i++)
{
if (strcmp(chaine1, chaine2[i]) == 0){ return 0;}
}
return -1;
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843
8 déc. 2008 à 15:37
Salut,
D'accord avec toi pour ne pas mettre le return-1; dans le else. Mais, les accolades dans le for ne sont pas obligés vu qu'il n'y a qu'une instruction. D'ailleurs dans le if non plus elles ne sont pas obligatoires.
Cdlt
0
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
8 déc. 2008 à 15:39
A ce moment la il faut mettre l'instruction sur la meme ligne que le for non?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843 > xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016
8 déc. 2008 à 15:42
A ce moment la il faut mettre l'instruction sur la meme ligne que le for non?
Non. En fait si tu ne mets pas les accolades, tu peux juste mettre une instruction, qu'elle soit à la ligne ou pas.
D'ailleurs le C ne fait pas la différence si c'est sur la même ligne ou pas, il se base sur le point virgule.
Cdlt
0
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
8 déc. 2008 à 15:46
Ok!!
ca fais longtemps que j'ai pas fais de C!
et je pensais que ca fonctionnais comme avec les if en Vb...
Merci pour cette info :)
0
Merci pour les {} pour le for. finalement j'ai utilisé une variable int a=1


for(i=0;i<27;i++)
{
if (strcmp(chaine1, chaine2[i]) == 0){ a=0,}}
return a;

pour moi , lorsque que la chaine 1 est reconnue dans le tableau de chaine l'entier a vaut 0, autrement il vaut toujours la valeur attribuée au départ. Pourtant lorsque j'execute il vaut toujours 0. je suis sure que c'est un minuscule probleme mais je n'arrive pas à le résoudre...
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
8 déc. 2008 à 15:35
Bonjour,

Je verrais un truc comme ça :
        int RC-return  = 0;
        int indic_ok1 = 0;
...................
...................

       RC-return  = 0;
       indic_ok1 = 0;

for (i=0; i<27; i++) 
  {
    if ( strcmp(chaine1,  chaine2[i]) == 0)   
      { indic_ok1 = 1; 
        break;
      }
  }
 if  ( indic_ok1 = 0)    { RC_return = -1;} 

return (RC_return);
0
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
8 déc. 2008 à 15:37
J'ai l'impression que nos deux propositions font exactement la même chose non?
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131 > xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016
8 déc. 2008 à 15:48
En effet, et la tienne est bien meilleure, je n'ai pas regardé (ou mal regardé) les réponses avant de poster, désolé.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843
8 déc. 2008 à 15:48
Bizarre d'utiliser autant de variables pour juste faire ça.
En plus il y a une petite erreur :
 if  ( indic_ok1 = 0)

indic_ok1=0, renverra 0, donc ça sera toujours faux. Pour comparer, c'est le double égal.

Pourquoi ne pas initialiser indic_ok1 à -1 et de retourner indic_ok1 tout à la fin ? T'économises déjà une variable.
Ou alors tu fais directement des return dans le if du for et à la fin. Ce qui économise deux variables, un if et un break.
Cdlt
0