Trier un tableau d'enregistrement
sam
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour
je cherche à trier un tableau d'enregistrement qui contient des chaines et des entiers ,et le tri doit se faire par rapport à l'une des chaines (tri par ordre alphabétique),mais le problème est que j'ai pas pu utiliser strcpy pour 2 champs d'un tableau malgré que ces 2 champs sont des chaines de caractères.
je cherche à trier un tableau d'enregistrement qui contient des chaines et des entiers ,et le tri doit se faire par rapport à l'une des chaines (tri par ordre alphabétique),mais le problème est que j'ai pas pu utiliser strcpy pour 2 champs d'un tableau malgré que ces 2 champs sont des chaines de caractères.
A voir également:
- Trier un tableau d'enregistrement
- Trier un tableau excel - Guide
- Tableau word - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
- Tableau croisé dynamique - Guide
2 réponses
Bonjour sam,
"mais le problème est que j'ai pas pu utiliser strcpy pour 2 champs d'un tableau malgré que ces 2 champs sont des chaines de caractères"
La description de ton problème est incompréhensible. On ne peut pas t'aider sans plus de précisions.
Montre la partie de code qui pose problème, explique ce qu'elle devrait faire, ce qu'elle fait, et pourquoi tu penses que tu as "un problème".
Quand tu postes ton code, poste le entre balises <code>, pour qu'il soit lisible. Comme cela :
<code>
Dal
"mais le problème est que j'ai pas pu utiliser strcpy pour 2 champs d'un tableau malgré que ces 2 champs sont des chaines de caractères"
La description de ton problème est incompréhensible. On ne peut pas t'aider sans plus de précisions.
Montre la partie de code qui pose problème, explique ce qu'elle devrait faire, ce qu'elle fait, et pourquoi tu penses que tu as "un problème".
Quand tu postes ton code, poste le entre balises <code>, pour qu'il soit lisible. Comme cela :
<code>
#include <stdio.h></code>
int main(void)
{
printf("Hello world\n";
return 0;
}
Dal
bon voila j fait un tr bulle pour trier le tableau c juse un essai je sais pas si c logique
#include <stdio.h>
struct identite
{
char mot[256];
char fichier[256];
int ligne;
int position_ligne;
};
void tri_bulle(struct identite *tab, int n)
{
int fin_tri;
struct identite echange[1];
int i=0;
{
int fin_tri = 1;
while(i<n)
{
if( strcmp(tab[i].mot,tab[i+1].mot)>0)
{
strcpy(echange.mot,tab[i].mot);
strcpy(echange.fichier,tab[i].fichier);
echange.ligne=tab[i].ligne;
echange.position_ligne=tab[i].position_ligne;
strcpy(tab[i].mot,tab[i+1].mot);
strcpy(tab[i].fichier,tab[i+1].fichier);
tab[i].ligne=tab[i+1].ligne;
tab[i].position_ligne=tab[i+1].position_ligne;
strcpy(tab[i+1].mot,echange.mot);
strcpy(tab[i+1].fichier,echange.fichier);
tab[i+1].ligne=echange.ligne;
tab[i+1].position_ligne=echange.position_ligne;
fin_tri = 0;
}
}while(fin_tri == 0);
}
}
int main()
{
struct identite tableau[3];
tableau[0].mot="asma";
tableau[1].mot="sonia";
tableau[2].mot="hadjer";
tableau[3].mot="celia";
tri_bulle(*tableau,3);
for(i=0,i=3,i++)
{
printf("tab[%d]=%s",i,tableau[i].mot);
}
}
Désolé de n'être pas revenu vers toi tout de suite.
Il y a beaucoup d'erreurs dans ton code, et il faut s'armer de courage (et de temps) pour te répondre utilement.
- si ton tableau de struct a 4 éléments, tu dois le déclarer avec 4 éléments :
- tu ne peux pas faire
- comme
- pour ta fonction,
- ta déclaration de echange devra être simplement :
- tes boucles ne vont pas. Fais un do / while pour contrôler si as toujours des bulles, et une simple boucle for à l'intérieur pour parcourir le tableau
- pour permuter le contenu de struct en C, tu peux simplement les affecter. Par exemple :
stp, avant de poster du code, essaye avant de le compiler avec tous les warnings (avec gcc l'option -Wall est déjà un bon début), et corrige toutes les erreurs de syntaxe empêchant la compilation, et comprend la raison des warnings émis par le compilateur et fais ce qu'il faut pour y remédier et faire taire tous les warnings. Si tu ne sais pas comment les corriger, vois ton cours de C, un manuel, cherche par toi même, et si tu n'y arrives pas pose la question ici :-)
Dal
Il y a beaucoup d'erreurs dans ton code, et il faut s'armer de courage (et de temps) pour te répondre utilement.
- si ton tableau de struct a 4 éléments, tu dois le déclarer avec 4 éléments :
struct identite tableau[4];et non 3.
- tu ne peux pas faire
tableau[0].mot = "asma";pour affecter une chaîne. Tu dois utiliser la fonction strcpy et inclure string.h. Comme cela :
strcpy(tableau[0].mot, "asma");
- comme
tableauest un tableau,
tableauest déjà un pointeur. C'est un pointeur vers le premier élément du tableau. Donc, ton appel à tri_bulle devrait être :
tri_bulle(tableau, 4);(et c'est 4 éléments qui sont contenus, pas 3)
- pour ta fonction,
void tri_bulle(struct identite *tab, int n)est un prototype correct
- ta déclaration de echange devra être simplement :
struct identite echange;car tu ne veux là qu'un seul struct
- tes boucles ne vont pas. Fais un do / while pour contrôler si as toujours des bulles, et une simple boucle for à l'intérieur pour parcourir le tableau
- pour permuter le contenu de struct en C, tu peux simplement les affecter. Par exemple :
echange = tab[i];, inutile d'affecter les membres de la struc un par un
stp, avant de poster du code, essaye avant de le compiler avec tous les warnings (avec gcc l'option -Wall est déjà un bon début), et corrige toutes les erreurs de syntaxe empêchant la compilation, et comprend la raison des warnings émis par le compilateur et fais ce qu'il faut pour y remédier et faire taire tous les warnings. Si tu ne sais pas comment les corriger, vois ton cours de C, un manuel, cherche par toi même, et si tu n'y arrives pas pose la question ici :-)
Dal