la franchement je desespere
j'ai compris les pointeurs et tout et tout
mais la l'exercices de mateo:
"Voici ce que je vous propose de faire : nous avons étudié sur la fin de ce chapitre un petit nombre de fonctions issues de la librairie string.h. Vous êtes parfaitement capables de les écrire vous-mêmes. Faites-le. "
ouai bon ben je bute a la premiere (fin la 2eme car la 1er est deja faite par mateo)
- longueuChaine => longueurChaine ?
- ta fonction doit retourner char*, or elle ne fait aucun return c'est normal ? A la rigueur transforme ta fonction en void et il n'y aura pas de problèmes si tu fais pas de return.
prog.exe a rencontre un probleme... et tout le charabia abituel donc je vous post tout mon code
main.c
#include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[]) { char chaine[] = "Salut", copie[100] = {0}; long longueur = 0;
longueur = longueurChaine(chaine);
printf("La chaine %s fait %ld caracteres de long", chaine, longueur); printf("Je copie la chaine appellee \"chaine\" dans une chaine \"copie\"\nVoici la chaine \"chaine\" : %s\nVoici la chaine \"copie\" : %s", chaine, copieChaine(&copie, &chaine)); return0; }
string.c
#include "string.h"
long longueurChaine(constchar* chaine) { long nombreDeCaracteres = 0; char caractereActuel = 0;
do {
caractereActuel = chaine[nombreDeCaracteres];
nombreDeCaracteres++; } while(caractereActuel != '\0'); // On boucle tant qu'on n'est pas arrivé à l'\0
nombreDeCaracteres--; // On retire 1 caractère de long pour ne pas compter l'\0
long longueurChaine(constchar* chaine) { long nombreDeCaracteres = 0; char caractereActuel = 0;
do {
caractereActuel = chaine[nombreDeCaracteres];
nombreDeCaracteres++; } while(caractereActuel != '\0'); // On boucle tant qu'on n'est pas arrivé à l'\0
nombreDeCaracteres--; // On retire 1 caractère de long pour ne pas compter l'\0
return nombreDeCaracteres; }
Ce genre de bidouille est révélatrice d'une erreur de conception (algorithme). Tout simplement par ce qu'on a codé la séquence suivante :
mettre le compteur à 0
FAIRE
lire le caractère
incrémenter le compteur
TANT QUE le caractère n'est pas 0
Evidemment, on a un coup de trop... alors on corrige en quittant en décrémentant le compteur. Bidouille...
2 corrections évidentes possibles :
mettre le compteur à -1
FAIRE
lire le caractère
incrémenter le compteur
TANT QUE le caractère n'est pas 0
C'est un peu bidouille, mais ce n'est pas trop mal.
mettre le compteur à 0
FAIRE
lire le caractère
SI il ne vaut pas 0
incrémenter le compteur
FIN SI
TANT QUE le caractère n'est pas 0
C'est un peu usine à gaz, mais ça donne une idée. Et si on combinait la lecture et le test à priori ?
La solution est
mettre le compteur à 0
TANT QUE la valeur lue n'est pas 0
incrémenter le compteur
FIN TANT QUE
Ce qui se code
long longueurChaine(constchar* chaine) { long nombreDeCaracteres = 0; char caractereActuel = 0;
merci a mateo21 pour son coups d'oeil util et a -ed-
1er exercices chaines de caractere
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
If you'd like to join us, read "How do we work at OpenClassrooms"! :)