Bonsoir,
Je rencontre un petit problème pour trier une liste de char ** dans l'ordre ascii :
En fait aucuns problèmes quand tous les mots commencent par une lettre différente par contre quand plusieurs mots possèdent des lettres communes impossible de trier.
Le truc c'est que je ne vois pas quelle algo appliqué , surtout que je dois utilisé ce tri d'une facon un peu particulière..
pour expliqué rapidement mon code, voila ce que je fais : je prends le premier char * comme base et compare le caractère avec les autres char * , si ces caractères sont différents je return la différence entre ces deux caractères (cela me permet de trier ces char * pour qu'il s'affiche parfaitement dans l'ordre ducoup le char * de base est à 0, ceux que je print avant sont un nb négatif et ceux que j'affiche après sont positif).
Voilà ce que je viens de vous décrire brièvement réussit à classer dans l'ordre en comparant tout. Malheureusement je dois trier parfaitement ces mots pour pouvoir les envoyer en tant que nb (ceux dont je vous ai parlé juste au dessus) qui me serviront de compteur pour afficher chaque char * mots par mots.
je pense qu'il y a plus simple , je crois que je me prends un peu la tete ..
Bref je vous poste le code . Si vous avez une toute petite idée d'algo (ou une question sur pourquoi je fais cela , ect) dites moi.
Merci pour votre aide
commencez à la fin PAR DEBUG_TETRI !
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 int funct(t_tetris_game *game, int x) { int j; char *word_base; word_base = game->tetrim->list[0]->name; j = 0; if (word_base[j] == game->tetrim->list[x]->name[j] && word_base != game->tetrim->list[x]->name) return (game->tetrim->list[x]->name[j] - word_base[j]); else if (word_base[j] != game->tetrim->list[x]->name[j]) return (game->tetrim->list[x]->name[j] - word_base[j]); j++; return (0); } int check(t_tetris_game *game, int *tab, int var) { int x; x = 0; while (x != game->tetrim->nb) { if (tab[x] == var) { my_putstr("Tetriminos : Name "); parcing_name(game, x); my_putchar('\n'); return (x); } x++; } return (0); } int *find_diff(t_tetris_game *game) { int x; int *tab; x = 0; my_putstr("\n"); tab = malloc(sizeof(int) * (game->tetrim->nb * 4096)); while (x != game->tetrim->nb) { tab[x] = funct(game, x); x++; } return (tab); } void debug_tetri(t_tetris_game *game) { int *tab; int x; int y; int var; x = 0; y = 0; tab = find_diff(game); while (x != game->tetrim->nb) { var = tab[0]; while (y != game->tetrim->nb) { if (var > tab[y] && tab[y] != 100) var = tab[y]; if (y == game->tetrim->nb-1) tab[check(game, tab, var)] = 100; y++; } y = 0; x++; } free (tab); }
Partager