Aide programme
Utilisateur anonyme
-
Dalfab Messages postés 706 Date d'inscription Statut Membre Dernière intervention -
Dalfab Messages postés 706 Date d'inscription Statut Membre Dernière intervention -
Bonjour, je dois rendre un devoir pour demain et je suis completement bloque !
l'utilisateur entre 3 chaines de caractères s,w1,w2
Le programme doit à l'aide de la fonction prefix_word dire si le premier mot de s est identique a w2
Ensuite il doit a l'aide de la fonction findword trouver toutes les fois ou w1 se trouve dans s
et ensuite a la de la focntion replace il doit remplacer w1 par w2 dans s
et a la fin il doit afficher s avec w2 et non w1
voila ce qu'on a écrit jusqu'à present mais je suis coince....
l'utilisateur entre 3 chaines de caractères s,w1,w2
Le programme doit à l'aide de la fonction prefix_word dire si le premier mot de s est identique a w2
Ensuite il doit a l'aide de la fonction findword trouver toutes les fois ou w1 se trouve dans s
et ensuite a la de la focntion replace il doit remplacer w1 par w2 dans s
et a la fin il doit afficher s avec w2 et non w1
voila ce qu'on a écrit jusqu'à present mais je suis coince....
#include <stdio.h> #include <stdlib.h> int prefix_word(char*s,char *w) int prefix_word (char*s, char*w) { int is=0, iw=0; if (w[iw]=='\0') { if (s[is]=='\0' || s[is]==' ') return 1; return 0; } else { if (s[is]!=w[iw]) return 0; } is++;iw++; } char *find_word (char*s,char*w) { char *p=s; while (*p!='\0') { if ((p==s|| *(p-1)==' ')&&prefix_word(p,w)==1) return 1; p++; } return *p; } char *p=replace_word(s,w1,w2); if (p!=NULL) { printf("\n%s\n",p); free(p); } return 0; char* replace_word(char *s, char *w1, char *w2) { char *p1=NULL; p1=s; int count=0; //count dit combien w1 apparait dans s en tant que mot lieu meme ( ICI code boucle qui utilise "find_word" et trouve à combien count est égal. ) int len=len_s(s)+count*(len_s(w2)-len_s(w1)); // len_s fonction aide qui trouve combien de caracteres sans '\0' il y a dans la chaine char *s1=malloc((len+1)sizepf(char)); if (s1==NULL)return NULL; p1=s; char *p2=s1; char *p3, *p4; for (int i=0; i<count; i++) { p3=find_word(p1,w1); while(p1<p3) { *p2+1=*p1++ } //tant que je rencontre pas w1 je copie le caractere dans la nouvelle chaine while (*p4!='\0') { *p2++=*p4++ }//copie w2 dans la nouvelle chaine p1+=len_s(w1); while (*p1) {*p2++=*p1++;} *p2=*p1 return }}
A voir également:
- Aide programme
- Programme demarrage windows - Guide
- Message programmé iphone - Guide
- Mettre en veille un programme - Guide
- Programme word gratuit - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
2 réponses
Je suis intrigué par l'écart entre le niveau de l'énoncé, qui pose des questions apparemment simples mais bourrées de pièges (je dirais niveau ingénieur non débutant), et le code proposé.
Ton code prefix_word() débute avec une bonne intention en s'intéressant au cas d'un mot vide qui sera inclus si la chaîne est vide ou commence par une espace. Bonne réflexion, puis tout devient plus flou. Il y a à la fois de problèmes de syntaxe et des problèmes de réflexion sur l'algorithmie.
Je peux essayer d'écrire prefix_word() mais la lecture de cette fonction ne t'aidera pas, il faut plus chercher à apprendre le langage.
Ton code prefix_word() débute avec une bonne intention en s'intéressant au cas d'un mot vide qui sera inclus si la chaîne est vide ou commence par une espace. Bonne réflexion, puis tout devient plus flou. Il y a à la fois de problèmes de syntaxe et des problèmes de réflexion sur l'algorithmie.
Je peux essayer d'écrire prefix_word() mais la lecture de cette fonction ne t'aidera pas, il faut plus chercher à apprendre le langage.
bool prefix_word( const char *str , const char *word ) { size_t size_wrd = strlen( word ); if ( size_wrd > strlen( str ) ) return false; // mot est plus long, il ne peut pas être inclus size_t i; for ( i = 0 ; i < size_wrd ; ++i ) { if ( word[i] != str[i] ) return false; // au moins un caractère diffère // ici word est entièrement égal au début de string if ( str[i] == '\0' || str[i] == ' ' ) // str doit se terminer ici return true; // ou le prochain caractère de str doit être une espace return false; // c'est un préfixe, mais pas un mot qui préfixe }Les autres fonctions sont un peu plus compliquées.
Ma version n'est pas forcément parfaite mais elle me semble logique. Ensuite pour connaître le nombre de fois qu'une chaîne de caractère est présente dans une autre il faut parcourir la chaîne de caractère la plus longue et regarder à chaque itération la plus courte lui est prefix.
J'ai aussi fait la fonction find_word, quand vous l'aurais réessayer avec mes indications, je vous aiderais, ou je vous donnerais ma version :).