Exercices sur les chaines de caractères
Aureche
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
Aureche Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
Aureche Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis un étudiant débutant la programmation en C, j'ai ici un exercice sur lequel je bloque depuis plusieurs heures et pas moyen de trouver ce qui ne vas pas, pourriez vous m'aider?
voici l'enoncé

Et voici mon code:
Si vous pouviez m'amener sur la bonne voie afin que je puisse réussir cet exercice cela serait très aimable.
Merci d'avance :)
EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Merci d'y penser dans tes prochains messages.
Je suis un étudiant débutant la programmation en C, j'ai ici un exercice sur lequel je bloque depuis plusieurs heures et pas moyen de trouver ce qui ne vas pas, pourriez vous m'aider?
voici l'enoncé
Et voici mon code:
#include <stdio.h> #include <stdlib.h> void fcompactage(char*,char*, int); int main() { char nom[15]; int a; printf("Encodez un nom: "); gets(&nom[0]); puts(&nom[0]); fcompactage(&nom[0],&nom[1], 15); puts(&nom[0]); } void fcompactage(char *pnom, char *pnom2, int nbmax) { int a,b,c; while(*pnom!=0) { a=*pnom; c=0; while(*pnom==*pnom2) { a=49; pnom2++; c++; } *pnom=a+c; pnom2++; pnom+c; pnom++; }
Si vous pouviez m'amener sur la bonne voie afin que je puisse réussir cet exercice cela serait très aimable.
Merci d'avance :)
EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Merci d'y penser dans tes prochains messages.
A voir également:
- Exercices sur les chaines de caractères
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Caractères ascii - Guide
- Caractères spéciaux - Guide
- Caractères spéciaux mac - Guide
- Caracteres speciaux - Guide
2 réponses
Bonjour,
Attention, pour poster du code il faut utiliser les balises (le bouton [<>]) sinon il devient difficile à lire.
D'autre part, si tu indiquais ce que tu obtiens ça serait plus facile pour nous (une erreur de compilation, un plantage à l'exécution, un mauvais résultat dans certains cas, ...)
Ton algorithme est plutôt pas mal, tu gères tout dans un unique buffer et arrives à gérer presque tout de manière unique y compris les cas où une lettre est là une seule ou plusieurs fois.
Si je prends tes 4 dernières lignes:
Pour comprendre le problème il te faut faut faire un dessin et applique la procédure à la main. Tu verras qu'avoir 2 pointeurs pnom et pnom2 n'est pas suffisant. Il te faut :
-
-
-
Et n'oublie pas de mettre un terminateur de chaîne à ton résultat.
Attention, pour poster du code il faut utiliser les balises (le bouton [<>]) sinon il devient difficile à lire.
D'autre part, si tu indiquais ce que tu obtiens ça serait plus facile pour nous (une erreur de compilation, un plantage à l'exécution, un mauvais résultat dans certains cas, ...)
Ton algorithme est plutôt pas mal, tu gères tout dans un unique buffer et arrives à gérer presque tout de manière unique y compris les cas où une lettre est là une seule ou plusieurs fois.
Si je prends tes 4 dernières lignes:
*pnom=a+c;pas mal l'astuce, ça gère les 2 cas.
pnom2++;pas mal aussi ce replacement.
pnom+c;Vois-tu pourquoi cette ligne n'a aucun sens?
pnom++;Là ça n'est pas aussi simple.
Pour comprendre le problème il te faut faut faire un dessin et applique la procédure à la main. Tu verras qu'avoir 2 pointeurs pnom et pnom2 n'est pas suffisant. Il te faut :
-
pnom_lit: le pointeur qui lit la chaîne
-
pnom_lit2: le pointeur juste après qui recherche les caractères en double.
-
pnom_ecrit: le pointeur qui écrit le résultat. au début il est égal à
pnom_litmais il avance moins vite que
pnom_lit.
Et n'oublie pas de mettre un terminateur de chaîne à ton résultat.