Salut tous,

J'avais passé trois jours à essayer de coder une fonction d'ajout par tri sur un structure de tableau de pointeur (char * tableau[50]) sans vraiment arriver à pointer du doigt le problème.

Bref j'ai fait quelques tests et ça ne semble pas trop aboutir, mais du moins je tombe sur des choses plus ou moins bonnes maintenant...

Voilà je vous montre d'abord le code :

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
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
///déclarer la chaîne masse qui servira de 'fin/stop' pour tableau
char * masse="\0";
 
///Création d'une liste
//cette fonction nous permettra de créer une liste vide et de mettre la masse sur le premier élément
// cette manipulation nous aidera sur les autres fonctions notamment l'ajout par tri
void Create(char * Pnt[])
{
    Pnt[0]=masse;
}
 
///fonction longueur de la liste
//fonction qui peut toujours être utile et pas trop compliqué au codage
int Length(char * p[])
{
    int i;
    for(i=0;strcmp(p[i],masse)!=0;i++);
    return i;
}
 
///Affichage simple
void Show(char * Pnt[])
{
    int i;
    for(i=0;strcmp(Pnt[i],masse)!=0;i++)
    {
        puts(Pnt[i]);
    }
}
 
//Ajout par tri
//cette fonction suppose aussi la création d'une liste vide qui se remplit en se triant en même temps, autrement dit
// on déclare simplement la listre (char * Pnt[];) après quoi elle la remplit une par une (Add_sort("premier"); Add_sort("deuxième");...).
 
 
 
void Add_sort(char * Pnt[],char * Ch)
{
    if(Length(Pnt)==0)
    {
        Pnt[0]=Ch;
        Pnt[1]=masse;
    }//après test ça marche !
    //Pnt[0]=Ch;
    else
    {
        int i;
        int j;
        for(i=0;strcmp(Pnt[i],Ch)<0 && strcmp(Pnt[i],masse)!=0;i++);
        for(j=0;j<i;j++)
        {
            Pnt[Length(Pnt)+1-j]=Pnt[Length(Pnt)-j];
        }
        Pnt[i]=Ch;
        for(i=0;strcmp(Pnt[i],masse)!=0;i++);
        Pnt[i+1]=masse;
    }
}
 
int main()
{
char * p[50];
Create(p);
Add_sort(p,"a");
Add_sort(p,"c");
Add_sort(p,"b");
 
Show(p);
 
return 0;
}
Les fonctions Show, Length et Create marchent donc on s'en soucie pas.
J'espère que vous pourriez au moins m'indiquer le problème

Remarque :
En compilation, j'ai remarqué que si l'on rajoute des chaînes ordonnées, tout va pour le mieux, et même que ça trie après le quatrième rajout, mais c'est pas toujours évident et des fois ça trie, des fois ça écrase...