Fonction en c

Résolu/Fermé
nilly Messages postés 154 Date d'inscription samedi 26 janvier 2008 Statut Membre Dernière intervention 25 octobre 2012 - 10 mars 2008 à 09:35
nilly Messages postés 154 Date d'inscription samedi 26 janvier 2008 Statut Membre Dernière intervention 25 octobre 2012 - 11 mars 2008 à 13:23
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*/

9 réponses

nilly Messages postés 154 Date d'inscription samedi 26 janvier 2008 Statut Membre Dernière intervention 25 octobre 2012 5
10 mars 2008 à 13:48
alooooo
quelqu'un peut m aider SVP
0
tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 121
10 mars 2008 à 14:12
tu as la fonction strstr( char *chaine1 , char *chaine2 ) qui cherche si chaine2 est présente dans chaine1
cela devrait t'aller ?
0
nilly Messages postés 154 Date d'inscription samedi 26 janvier 2008 Statut Membre Dernière intervention 25 octobre 2012 5
10 mars 2008 à 14:41
justement mais le prof nous a demander de ne pas utiliser les fonctions de sritng.h
0
tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 121
10 mars 2008 à 15:20
et bien tu réécris la fonction strchr() ! (c'est pas bien dur !)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nilly Messages postés 154 Date d'inscription samedi 26 janvier 2008 Statut Membre Dernière intervention 25 octobre 2012 5
10 mars 2008 à 20:08
ok merci
0
nilly Messages postés 154 Date d'inscription samedi 26 janvier 2008 Statut Membre Dernière intervention 25 octobre 2012 5
10 mars 2008 à 22:14
le code source de cette fonction est trops compliqué
et j arrive pas a faire quelque chose de simple
0
tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 121
10 mars 2008 à 23:21
écoute c'est pas trop compliqué. Si tu n'y arrive pas, c'est peut être ambitieux de vouloir aller plus loin, désolé.
0
mamiemando Messages postés 33390 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 7 803
11 mars 2008 à 01:00
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.
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
0
nilly Messages postés 154 Date d'inscription samedi 26 janvier 2008 Statut Membre Dernière intervention 25 octobre 2012 5
11 mars 2008 à 13:23
merci beaucoup de votre aide je vais essayé,
0