N'ajouter qu'un élément unique à un tableau en C

Signaler
Messages postés
3
Date d'inscription
dimanche 12 novembre 2006
Statut
Membre
Dernière intervention
3 décembre 2010
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour,

j'ai plusieurs chaine (char *), plusieurs sont identiques, et je ne voudrais ajouter que celles qui ne sont pas encore dans le tableau.

Exemple :
les chaines : "titi", "toto", "tata", "titi", "tutu", "toto"

ne stockera que dans le tableau ["titi","toto","tata","tutu"]

Merci d'avance,

Aurel

3 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
Je t'ai fait tout cuit tout prémaché le code de ta question précédente, faut pas en prendre l'habitude.

Propose un début de travail sérieux et il y aura surement quelqu'un ici pour t'aider.

ciao...
BruNews, MVP VC++
Messages postés
3
Date d'inscription
dimanche 12 novembre 2006
Statut
Membre
Dernière intervention
3 décembre 2010

Mon travail serait trop compliqué à décortiquer. Il s'agit d'un projet conséquent et je bloque sur cette histoire de tableau.
J'ai laissé tombé l'histoire de créer un nouveau tableau sans doublons à partir du premier. Ça me parait inutile en y re-pensant.

Je cherche directement à stocker les données qui viennent en fait dans mon projet d'une pile de type Personne.

Mon type Personne :

/* structure article */
typedef struct str_personne {
int id; //id de la personne
        char * nom;
        char * prenom;
int age;
}Personne;


Ma pile de personnes :

typedef struct str_p_personnes
{
    Personne p;
    struct str_p_personnes *precedent;
}Spile, *P_Personnes;


Ma fonction doit afficher les personnes par noms. (C'est pour cela que je cherche le moyen d'afficher qu'une seule fois le nom.



Exemple :
DUPONT
Pierre
Marie

SMITH
Jean

Ma fonction actuelle :

void impression(P_Personnes pers)
{
Nat nb = hauteur(p); //hauteur de la pile

Chaine noms [nb]; //tableau de stockage des categories
Personne p = initialisation();
P_Personnes q;

int i;
for(i=0;i<nb;i++)//on sauvegarde dans une pile temporaire
{
p = sommet(pers);
q=empiler(q,p);
pers=depiler(pers);
}


for(i=0;i<nb;i++)
{
p = sommet(q);
pers=empiler(pers,p);

while(pers.nom!=noms[i])
{
i++; //c'est ici que je cherche à n'avoir qu'une seule fois le nom
}
q=depiler(q);
}

for(i=0;i<nb;i++)
{
printf("Nom %s\n",noms[i]);


Nat j;
for(j=0;j<nb;j++)
{
p = sommet(pers);
q=empiler(q,p);
pers=depiler(pers);
}

Nat k;
for(k=0;k<nb;k++)
{
p = sommet(q);
pers=empiler(pers,p);

if(p.nom==noms[i])
{
printf("%d\n",p.prenom);
}
q=depiler(q);
}
printf("\n");
}
}


Voilà, j'espère que c'est plus compréhensible,

Aurel
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
strcmp() te dira si est deja dans la pile.

ciao...
BruNews, MVP VC++