Bonjour, voici un exercice donné par mon formateur et que j'essaie de faire avec mes camarades à l'université. On fait de notre mieux pour apprendre tous les jours à correctement commenter notre code. Merci pour vos retours car on ne sait pas si le programme écrit en C va tourner...On travaille en 3 parties :lire les données en entrée, calculer les données, afficher les données (le résultat)
Voici la consigne :
Permettre à l’utilisateur du programme de modifier une chaîne de caractères originale (ch1) avec les fonctionnalités suivantes :
-suppression de toutes les apparitions au sein de la chaîne originale, de la sous-chaîne constituée d’une
suite de 4 caractères entrés au clavier par l’utilisateur.
La suppression ne sera mise en œuvre que si la sous-chaîne est constituée des 4 caractères entrés au
clavier avec le même ordre que celui observé lors de leur saisie;
- le nombre de suppressions effectuées au sein de la chaîne initiale doit être affiché ou, le cas échéant,
un message indiquant qu’il n’y a eu aucune suppression.Merci de nous avoir lu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 //Partie pour lire les données #include <stdio.h> //préprocesseur qui inclue les fichiers h dans c #include <stdlib.h> //lit le contenu de <stdlib.h> #include <string.h> //inclue la bibliothèque contenant strlen() #define N 128 //déclaration de la variable supprime avec son paramètre char qui contient chaque argument de supprime int supprime (char * ); // on n'est pas sûr s'il faudrait écrire le * //déclaration de la fonction principale du programme avec ses parametres : /* Le nombre d'arguments ENTIER sur la ligne de commande, et le tableau de chaînes de caractères (***chacune contenant un des arguments***).*/ int main(int argc, char *argv[]) { char ch1 [N]; //déclaration de ch1 le tableau de chaines decaractères dont la composante vaut N int nbsuppression = 0; //initialisation de nbsuppression printf(" Entrez la chaine originale contenant maximum %d caracteres :\n\n ", N - 1); gets(ch1); // lire la chaine de caractères dans l'ordre nbsuppression = supprime (ch1); //affectation if (nbsuppression) //si nbsuppression est vraie alors... { printf("Voici le nombre de suppression(s) effectuee(s) : %d\n", nbsuppression); printf("Chaine modifiee :"); puts(ch1); //la fonction puts definie dans <stdio.h> va permettre d'écrire le string pour l'output } else printf("Aucune suppression effectuee dans la chaine originale.\n"); system("PAUSE"); return 0; } //Partie pour calculer les données //déclaration de la fonction supprime avec son paramètre s qui est la chaine de caractère contenant chaque argument de supprime int supprime (char * s) { // on ne comprend pas pourquoi il faudrait écrire * avant le s //initialisation des variables int cpt = 0, indlect = 0, indecrit = 0, lgchaine = strlen(s); //lgchaine pour la longueur effective char srecherchee[5]; printf("Entrez une sous chaine de 4 caracteres a supprimer : \n"); gets(srecherchee); //boucle while //utilisation d'une indice lecture et d'uneindiced'écriture while (indlect <= (lgchaine - 4)) // aussi longtemps qu'il restera au moins 4 caractères avant la fin de chaîne { if ( (*(s + indlect) == *srecherchee) && (*(s + indlect + 1) == *(srecherchee + 1)) && (*(s + indlect + 2) == *(srecherchee + 2)) && (*(s + indlect + 3) == *(srecherchee + 3)) ) { cpt++; indlect = indlect + 4; } else { *(s + indecrit) = *(s + indlect); indlect++; indecrit++; } } //Partie pour afficher le résultat while (*(s + indlect)) // on n'arrive pas à se décider où mettre le * ni à quoi ça pourrait servir { *(s + indecrit) = *(s + indlect); //indice d'écriture reçoit la valeur de l'indice de lecture indlect++; indecrit++; } *(s + indecrit) = '\0'; return cpt;
Partager