Fonction en c
Résolu
nilly
Messages postés
162
Statut
Membre
-
nilly Messages postés 162 Statut Membre -
nilly Messages postés 162 Statut Membre -
Bonjour,
je veux écrire ,en langage c,une fonction qui teste si un mot1 est un sous_mot d un mot2
on dit que a est un sous_mot de b si a peut etre obtenu a partir de b en supprimant un certain nombre de lettres de b,
exemple:
le mot abbba
possède les sous_mots suivants:
abbba /*en ne supprimant aucune lettre*/
abbb /*en supprimant une seule lettre*/
abba
bbba
abb /*en supprimant 2 lettre*/
aba
bba
bbb
aa /*en supprimant 3 lettre */
ab
ba
bb
a /*en supprimant 4 lettres*/
b
mot vide /*en supprimant toutes les lettres*/
je veux écrire ,en langage c,une fonction qui teste si un mot1 est un sous_mot d un mot2
on dit que a est un sous_mot de b si a peut etre obtenu a partir de b en supprimant un certain nombre de lettres de b,
exemple:
le mot abbba
possède les sous_mots suivants:
abbba /*en ne supprimant aucune lettre*/
abbb /*en supprimant une seule lettre*/
abba
bbba
abb /*en supprimant 2 lettre*/
aba
bba
bbb
aa /*en supprimant 3 lettre */
ab
ba
bb
a /*en supprimant 4 lettres*/
b
mot vide /*en supprimant toutes les lettres*/
A voir également:
- Fonction en c
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
9 réponses
tu as la fonction strstr( char *chaine1 , char *chaine2 ) qui cherche si chaine2 est présente dans chaine1
cela devrait t'aller ?
cela devrait t'aller ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
le code source de cette fonction est trops compliqué
et j arrive pas a faire quelque chose de simple
et j arrive pas a faire quelque chose de simple
écoute c'est pas trop compliqué. Si tu n'y arrive pas, c'est peut être ambitieux de vouloir aller plus loin, désolé.
Avant de coder en C essaye de trouver le raisonnement en pseudo code. Concrètement tu as une chaîne (str) et tu cherches si une sous chaîne (motif) est contenue dedans. Concrètement une chaîne est juste un tableau de char terminée par le caractère spécial '\0'.
Dans ton cas il faut parcourir str jusqu'à trouver la première lettre de motif.
- Si tu la trouves il faut voir si la lettre suivante correspond bien à la 2nde lettre de motif.
- Sinon il faut repartir du début de motif et continuer à avancer dans str, dans l'espoir de trouver motif plus loin.
Il suffit ensuite d'appliquer ce raisonnement jusqu'à soit avoir atteint la fin de motif (auquel cas tu as bien prouvé que motif était contenu dans str) ou de str (auquel cas motif n'était pas présent dans le mot).
Le piège dans cette exercice c'est qu'à chaque fois que tu avances dans l'une des deux chaînes que tu ne dépasses pas le caractère de fin de chaîne.
Maintenant réfléchissons au type de ta fonction. Dans ton cas on retourne un booléen (si tu es en C et non en C++ met un int) et deux chaînes. Comme ces deux chaînes sont maintenues constantes par notre fonction on peut utiliser le type const char * au lieux de char *, ce qui est plus propre et plus générique.
A présent essaye de nous proposer le pseudo code correspondant à ta fonction, et une fois cette étape terminée on passera à l'implémentation.
Bonne chance
Dans ton cas il faut parcourir str jusqu'à trouver la première lettre de motif.
- Si tu la trouves il faut voir si la lettre suivante correspond bien à la 2nde lettre de motif.
- Sinon il faut repartir du début de motif et continuer à avancer dans str, dans l'espoir de trouver motif plus loin.
Il suffit ensuite d'appliquer ce raisonnement jusqu'à soit avoir atteint la fin de motif (auquel cas tu as bien prouvé que motif était contenu dans str) ou de str (auquel cas motif n'était pas présent dans le mot).
Le piège dans cette exercice c'est qu'à chaque fois que tu avances dans l'une des deux chaînes que tu ne dépasses pas le caractère de fin de chaîne.
Maintenant réfléchissons au type de ta fonction. Dans ton cas on retourne un booléen (si tu es en C et non en C++ met un int) et deux chaînes. Comme ces deux chaînes sont maintenues constantes par notre fonction on peut utiliser le type const char * au lieux de char *, ce qui est plus propre et plus générique.
bool est_sous_mot(const char *str,const char *motif);
A présent essaye de nous proposer le pseudo code correspondant à ta fonction, et une fois cette étape terminée on passera à l'implémentation.
Bonne chance