etienn11
Messages postés3Date d'inscriptionlundi 27 octobre 2003StatutMembreDernière intervention 4 septembre 2006
-
5 mai 2005 à 12:10
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 2006
-
5 mai 2005 à 16:09
Bonjour,
Je cherche à trier les lignes d'un fichier (80 car et 100 lignes MAX) en C.
J'y suis arrivé avec le code ci-dessous, mais maintenant j'aimerais pouvoir effectuer le tri non plus sur le début de la ligne, mais par exemple en commençant au 10e caractère.
Je ne vois pas comment faire, quelqu'un peut-il m'aider ?????
Pascal
#include <stdio.h>
main()
{
/* variable */
char LIGNE[80]; /* chaîne pour les lignes du fichier */
char *MOT[100]; /* Pointeurs de car pour les 100 lignes */
char *TMP; /* pour la permutation des pointeurs */
int FIN; /* ligne où la dernière permutation a eu lieu */
FILE *F; /* fichier */
int I,J; /* pour les boucles */
/***********************************/
/* ouverture du fichier et lecture des lignes*/
/***********************************/
F = fopen("d:\\c\\fin\\fic.txt", "r");
for (I=0; I<100; I++)
{
/* Lecture de la ligne */
fgets(LIGNE, 80, F) ;
/* Réservation de la mémoire */
MOT[I] = malloc(strlen(LIGNE)+1);
if (MOT[I])
{
strcpy(MOT[I], LIGNE);
}
}
/***********************************/
/* Tri du tableau */
/***********************************/
for (I=99 ; I>0 ; I=FIN)
{
FIN=0;
for (J=0; J0)
{
FIN=J;
TMP = MOT[J];
MOT[J] = MOT[J+1];
MOT[J+1] = TMP;
}
}
/***********************************/
/* Affichage du tableau trié */
/***********************************/
puts("Tableau trié :");
for (I=0; I<99; I++)
puts(MOT[I]);
while(getchar());
}
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 20065 5 mai 2005 à 13:26
Je dirais if (strcmp(MOT[J]+10,MOT[J+1]+10)>0),
mais pour le tris du tableau renseigne toi sur qsort (déclarée dans
stdlib.h), ton code sera plus simple et plus rapide.
Tu oublis de liberer les pointeurs du tableau MOT et de fermer le fichier (fclose).
Il manque des headers:
#include <stdlib.h> /* malloc, free */
#include <string.h> /* strcmp */
Je ne sais pas avec quel compilateur tu compiles mais penses a activer
les warnings pour savoir si tu as oublié un header, les déclarations
implicites peuvent etre a l'origine de bugs vicieux.
etienn11
Messages postés3Date d'inscriptionlundi 27 octobre 2003StatutMembreDernière intervention 4 septembre 2006 5 mai 2005 à 15:51
Merci pour votre aide.
Pour ce qui est des headers, libération de pointeurs... merci de me les avoir signalé mais c'est parce ce que j'ai extrait uniquement la partie de mon code qui me posait problème....
Le qsort fonctionne en c ?
Je croyais que ça ne marchait qu'en c++.