Comparaison chaine de caractere
lechat
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 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.
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.
Configuration: Linux Firefox 1.5.0.9
2 réponses
-
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;-
-
-
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 -
-
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...
-
-
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);-
-
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
-