Match

Fermé
ati - Modifié par ati le 17/09/2013 à 09:01
juliencolin54 Messages postés 217 Date d'inscription dimanche 22 juillet 2012 Statut Membre Dernière intervention 1 octobre 2013 - 17 sept. 2013 à 14:47
Bonjour,


je dois creer une fonction dont le but est de savoir si deux chaines matchent : on dit que s1 et s2 matchent lorsque s1 et s2 sont identiques, si s2 contient une étoile ('*'), on pourra remplacer cette étoile par n'importe quelle chaîne de caractères (même vide) a?n de rendre s1 et s2 identiques, s2 peut contenir autant d'étoiles que l'on souhaite. Par exemple, "main.c" et "*.c" matchent car il est possible de remplacer '*' par la chaîne "main" pour faire en sorte que les deux chaînes soient identiques.

J ai commencé comme ca :

int match(char *s1, char *s2)
{
if (s2[*]
else if (s2 = s1)
{
return(0);
}
}
donc dans le if je ne sais pas vraiment comment proceder pour mettre que si s2 contient une etoile on peut la remplacer par une chaine, evidemment je ne demande pas directement la reponse mais si vous pouviez m aider ca serait top, merci.

5 réponses

juliencolin54 Messages postés 217 Date d'inscription dimanche 22 juillet 2012 Statut Membre Dernière intervention 1 octobre 2013 55
17 sept. 2013 à 08:45
Bonjour,

"*" est la wildcard, elle peut remplacer toutes chaînes de caractères.
Donc au lieu de tester si deux chaînes "simple" sont identiques (comme le fait strcmp()), tu testes des chaînes contenant ce caractère.

Par exemple :
match("toto", "toto") == 1
car
"toto" est "toto" sont identiques
match("toto", "t*t*") == 1
car
si chaque "*" est remplacée par un "o" les deux chaînes sont identiques
match("toto", "*") == 1
car
si on remplace "*" par "toto", les deux chaînes sont identiques
match("toto", "*toto*") == 1
car
si on remplace les deux "*" par "" (chaîne vide), les deux chaînes sont identiques
match("toto", "*o*") == 1
car
si on remplace la première "*" par "t" et la deuxième "*" par "to", les deux chaînes sont identiques
match("toto", "*a") == 0
car
la deuxième chaîne "*a" signifie "toute chaîne se finissant par un a", or "toto" ne correspond pas.

Peut-être que ça pourrait t'aider aussi dans tes recherches de savoir que c'est un exercice de la piscine d'Epitech.
Normalement, l'exercice suivant est
int nmatch(str, str)
, et généralement, il est préférable de commencer par celui-ci !

Cordialement,
2