Comparaison chaine de caractere

lechat -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
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 3289 Date d'inscription   Statut Membre Dernière intervention   311
 
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   Statut Contributeur Dernière intervention   1 846
 
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 3289 Date d'inscription   Statut Membre Dernière intervention   311 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
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   Statut Contributeur Dernière intervention   1 846 > xav3601 Messages postés 3289 Date d'inscription   Statut Membre Dernière intervention  
 
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 3289 Date d'inscription   Statut Membre Dernière intervention   311 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
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
lechat
 
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   Statut Membre Dernière intervention   131
 
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 3289 Date d'inscription   Statut Membre Dernière intervention   311
 
J'ai l'impression que nos deux propositions font exactement la même chose non?
0
cchristian Messages postés 921 Date d'inscription   Statut Membre Dernière intervention   131 > xav3601 Messages postés 3289 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   1 846
 
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