Bonjour,
j'ai commencé l'étude des tris de caractère (a, b, c) pour par exemple trier des noms.
j'ai dans mon programme une fonction d'entrée des noms, une fonction de tri, et une fonction d'affichage de la liste triée. (c'est peut être pas le plus simple).
voici le code complet de mon petit programme (74 lignes)
dans ma fonction get_lines j'utilise pour l'instant gets (oui, je sais c'est mal). si je change en voulant utiliser fgets (comme recommandé dans ce forum a raison, ça compile pas).
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 /* L'utilisateur tape une suite d'entrées au clavier, elles * sont triées puis affichées à l'écran */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXLINE 25 /*pas plus de 25 phrases */ int get_lines(char *lines[]); /*entrée des phrases */ void sort(char *p[], int n); /*tris des phrases */ void print_strings(char *p[], int n); /*réaffichage à l'écran */ char *lines[MAXLINE]; int main() { int number_of_lines; /*lire les phrases au clavier */ number_of_lines = get_lines(lines); if (number_of_lines < 0) { puts("Erreur de mémoire"); exit(-1); } sort(lines, number_of_lines); print_strings(lines, number_of_lines); return 0; } int get_lines(char *lines[]) { int n = 0; char buffer[80]; /*Mémoire de stockage temporaire */ puts("Tapez les phrases une par une"); puts("Terminez par un simple appui sur Entrée"); while((n < MAXLINE) && (gets(buffer) !=0) && (buffer[0] !='\0')) { if ((lines[n] = (char *)malloc(strlen(buffer)+1)) == NULL) return -1; strcpy(lines[n++], buffer); } return n; } /*fin de get_lines() */ void sort(char *p[], int n) { int a,b; char *x; for (a = 1; a < n; a++) for (b = 0; b < n-1; b++) {if (strcmp(p[b],p[b+1] ) > 0) { x = p[b]; p[b] = p[b+1]; p[b+1] = x; } } } /*fin de sort() */ void print_strings(char *p[], int n) { int count; for(count = 0; count <n; count++) printf("%s\n", p[count]); } /*fin de print_strings() */
Pourquoi ? car d'habitude elle ne pose pas de problème.
Partager