Comparaison chaine de caractere
lechat
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
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.
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:
- Comparaison chaine de caractere
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Comparaison million milliard - Accueil - Technologies
- Chaine tnt gratuite sur mobile - Guide
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;
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;
Bonjour,
Je verrais un truc comme ça :
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 :
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
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
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
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
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 :)
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...