Match
ati
-
juliencolin54 Messages postés 238 Statut Membre -
juliencolin54 Messages postés 238 Statut Membre -
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.
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.
A voir également:
- Match n match
- Application pour regarder match en direct sur iphone - Télécharger - Médias et Actualité
- Java de match - Télécharger - Jeux vidéo
- Resultat match - Télécharger - Vie quotidienne
- Match real madrid en direct gratuit - Télécharger - Vie quotidienne
- Play Real Football 2015 Game - Télécharger - Jeux vidéo
5 réponses
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 :
"toto" est "toto" sont identiques
si chaque "*" est remplacée par un "o" les deux chaînes sont identiques
si on remplace "*" par "toto", les deux chaînes sont identiques
si on remplace les deux "*" par "" (chaîne vide), les deux chaînes sont identiques
si on remplace la première "*" par "t" et la deuxième "*" par "to", les deux chaînes sont identiques
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
Cordialement,
"*" 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,
En gros,
Pour faire un simple
Ici c'est la même chose, mais sauf que quand t'as une "*" ça peut être équivalant à n'importe quelle chaîne de caractère.
Le plus simple, c'est d'utiliser la récursivité, tu vois ce que c'est ?
Si oui, commence par faire un
Pour faire un simple
strcmp(), tu parcours tes chaînes caractère par caractère pour voir s'ils sont différents (ou pas).
Ici c'est la même chose, mais sauf que quand t'as une "*" ça peut être équivalant à n'importe quelle chaîne de caractère.
Le plus simple, c'est d'utiliser la récursivité, tu vois ce que c'est ?
Si oui, commence par faire un
strcmp()récursif avant, pour comprendre la manière d'avancer dans ta récursivité.
A là vue de ton code, je pense qu'il est un peu tôt pour attaquer match() en récursif comme ça !
Je dis ça en voyant ces erreur là :
-
-
manque de parenthèse fermante
pour accéder au ième caractère il faut faire s1[i], donc s1[] n'a aucun sens
s2[*] n'a pas de sens non plus car ça signifie, "je veux accéder au *ème caractère"
-
manque de parenthèse fermante
match(s1, s2) est une fonction qui prend deux paramètres et non pas un comme tu l'as appelé ici.
C'est pour ça que je te conseilles de commencer par un strcmp() avec et sans récursivité, parce que tu as trop de choses à revoir dans ce code.
Cdlt,
Je dis ça en voyant ces erreur là :
-
if (s1=s2)là , tu compares deux pointeurs. On ne peux pas comparer deux chaînes de caractères comme ceci, il faut le faire caractère par caractère, à l'aide d'une boucle.
-
if (s1[] = s2[*]
manque de parenthèse fermante
pour accéder au ième caractère il faut faire s1[i], donc s1[] n'a aucun sens
s2[*] n'a pas de sens non plus car ça signifie, "je veux accéder au *ème caractère"
-
return (s2 * match(s1-1)
manque de parenthèse fermante
match(s1, s2) est une fonction qui prend deux paramètres et non pas un comme tu l'as appelé ici.
C'est pour ça que je te conseilles de commencer par un strcmp() avec et sans récursivité, parce que tu as trop de choses à revoir dans ce code.
Cdlt,
Bonjour je te remercie de ta reponse, je vois un peu mieux comment proceder, mais par exemple vu que cela peut prendre n importe quelle caractere chifre lettre etc je peux en faisanr caractere par caractere du genre * = a, *=b etc, mais sans compter le temps ca serait beaucoup trop volumineux, et je ne vois pas comment faire que n importe quelle caractere soit egal a '*'
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question