Bonjour à tous,
Après avoir arrêté la programmation pendant environ un an et demi je m'y remets mais je dois avouer que je dois travailler pour retrouver mes réflex d'antan.
J'ai trouvé un exercice sur internet qui consiste à programmer une fonction qui prend en paramètre une chaine de caractère et qui retourne lors de chaque appel successif le mots successifs de la chaine initiale à condition de lui passer NULL en argument.
De mémoire cela ressemble à une fonction de la bibliothèque standard (strtok si je me souviens bien)
voici le code
Je compile avec Code Block, pas de soucis la compilation marche bien, mais l'ennui c'est que le programme en lui même ne m'affiche aucune réponse, juste l'invite pour saisir la chaine de départ, mais il ne me la divise pas en mots successif avec la boucle for du main.
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103 #include <iostream> #include <cstdlib> #define MAX 80 using namespace std ; // 23-06-07 // Programme permettant la saisie d'une chaine, puis son extraction mot par mot à la manière de la fonction char* split_word(char*) ; int main() { char* pchaine ; char* display ; int i = 0, count = 0 ; pchaine = new char[MAX] ; if(!pchaine) { cout << "Mémoire insuffisante ! " ; exit(1) ; } cout << endl << "Saisissez votre chaine :" << endl ; cin.getline(pchaine, MAX, '\n') ; while (*(pchaine + i) != '\0') // boucle permettant de compter le nombre d'espace dans la chaine { if(*(pchaine + i) != ' ') count++ ; i++ ; } cout << split_word(pchaine) ; // affiche le premier mots for(i=1 ; i <= count ; i++) { display = split_word(NULL) ; cout<< endl << display << endl ; delete [] display ; } return 0; } // fonction retournant le mot suivant d'une chaine initiale si on lui passe NULL en paramètre sinon recommence si on lui passe une // chaine de caractères. char* split_word(char* chaine_input) { static char* chaine_m ; // chaine mémorisée char* buffer = NULL ; //chaine tampon pour raccourcir celle d'avant. char* mot = NULL; // chaine de retour int length=0, j=0 ; if((chaine_input == NULL)) //on affiche le mot suivant si on reçoit NULL en paramètre { while(*(chaine_m + length) != ' ') // compte le nombre de caractères avant l'espace suivant { length++ ; } mot = new char[length] ; // on crée une chaine de la longueur du mot. if (!mot) { cout << "Mémoire insuffisante" ; exit(1) ; } for(j=0; j<length; j++) { *(mot + j) = *(chaine_m + j) ; // copie des lettre du mots dans *word } buffer = chaine_m ; // charge le tampon j=0 ; while (*(chaine_m+j) != '\0') { *(chaine_m + j) = *(buffer + j + length) ; j++ ; } } else // on sélectionne la chaine en entrée { chaine_m = chaine_input ; } cout << mot ; return mot ; }
Suite à un rapide tour par le debugger, me montre que apparament les boucles et la fonction split_word s'effectuent bien.
Donc ne voyant pas d'où peut venir le problème, je me tourne vers vous qui m'avez tant de fois dépanner par le passé.
Si vous pouvez m'éclairer dans mon problème.
D'avance merci
Lvdnono
Partager