Rechercher une chaîne de caractère dans une autre chaîne de

Fermé
ham - 29 avril 2014 à 17:41
 ham - 3 mai 2014 à 16:47
Bonjour,

je débute en c

j'ai un problème dans un exo
le but est de comparer deux chaînes de caractère

le programme renvoie vrai si la chaîne 2 est comprise dans la chaîne 1

le programme renvoie faux si la chaîne 2 n'est pas comprise dans la chaîne 1

voila le programme que j'ai réalisé et je suis bloqué

merci pour votre aide

#include <stdio.h>
#include <stdlib.h>
# include <stdio.h>
# include <stdlib.h>
typedef enum { false, true } bool;

int cmp(const char* s1, const char* s2);

int main()
{

char chaine1[] = "coucou";
char chaine2[] = "coucou";

if(cmp(chaine1, chaine2)==true )
{
printf("les chaines sont identiques\n");
}
else
{
printf("les chaines ne sont pas identiques\n");
}
return 0;
}
int cmp(const char* s1, const char* s2)
{
int i = 0;

do
{
if (s1[i] != s2[i])
return false;

i++;
}
while (s1[i-1] != 0);

return true;
}

A voir également:

4 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
29 avril 2014 à 17:48
Bonjour,

Déjà, faudrait commencer par clarifier l'énoncé :

le but est de comparer deux chaînes de caractère

le programme renvoie vrai si la chaîne 2 est comprise dans la chaîne 1


Donc que souhaites-tu ? Comparer deux chaînes (égalité des chaînes ou non) ou vérifier que l'une fait partie de l'autre (inclusion) ?

Cdlt,
0
Bonjour

je souhaite vérifier que l'une fait partie de l'autre


CDT
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
2 mai 2014 à 20:44
Donc dans ton programme, la fonction cmp() ne sert à rien. Il vaut mieux faire une fonction estInclus() dont le prototype serait :
int estInclus (const char * const ch1, const char *const ch2)

Elle renverra 1 (true) si ch1 est inclus dans ch2, 0 (false) sinon.

Il faut donc plutôt tester : chaine1="def" et chaine2="adcdefgh" que 2 chaînes identiques.

Donc au début, tu testes les premières lettres de chacune des 2 chaînes :
"adcdefgh" avec "def" -> KO
"dcdefgh" avec "def" -> OK
"cdefgh" avec "ef" -> KO
"cdefgh" avec "def" -> KO
"defgh" avec "def" -> OK
"efgh" avec "ef" -> OK
"fgh" avec "f" -> OK (fin de chaîne).

Donc, "def" est bien compris dans "adcdefgh"

Si tu as compris le principe, tu devrais être en mesure de coder l'algorithme.

Cdlt,
0
bjr

ok

merci

cdt
0