Taille Fichier avec malloc et realloc

Signaler
Messages postés
8
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
24 mai 2007
-
Messages postés
8
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
24 mai 2007
-
Au secours!!!

Slt j'aimerai creer un fichier (de mot) mais en allouant dynamiquement  la  la taille (avec malloc et realloc). un mot a au plus 100 caracteres, et l'affichage dois se faire par ordre alphabetique (avec qsort).Mon programme dois etre capable de prendre n'importe quel fichier en entree et afficher le contenu par ordre alphabetique.
Comment dois je faire???

 Merci de votre aide.

9 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Messages postés
8
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
24 mai 2007

Merci!!!
Messages postés
149
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
17 mai 2007
2
Salut,

Donc tu veux faire un tableau de mots, mais tu ne connais pas à l'avance le nombre de mots. La méthode la meilleure pour ça c'est la suivante :
- Tu commences avec un tableau ayant une capacité de x mots (x=10 ou plus, à toi de voir). Ca veut pas dire que le tableau contient x mots, ça veut dire qu'il peut en contenir au plus que x.
- dès que tu cherches à entrer un mot et que le tableau est plein (disons le (x+1)-ème mot), tu doubles la capacité du tableau, en faisant ton realloc donc. Ca va te garantir que tu passes pas ton temps à faire des realloc.


Pour te faciliter la vie, alloue 100 octets pour chaque mot. Ca te permettra de calculer facilement combien d'octets un tableau de x mots occupe.


 


@+++
Messages postés
8
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
24 mai 2007

ok c exactement mon probleme mais je ne comprend pas bien le fonctionnement de realloc parceuqe ce que je fais ne marche pas.j'aimerai aussi utiliser qsort pour trier  ce tableau et l'afficher peut tu  m'aiclaircir  un peu avec un example.
char *tab[] est ma definition du tableau. Au depart  100 mots et 1mot a au plus 100 caracteres.
Messages postés
149
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
17 mai 2007
2
Ok, je te fais le code, ainsi tu auras une idée..
Bouge pas.

Une autruche ne se cuit pas aux petits lardons.
Messages postés
149
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
17 mai 2007
2
#include <stdio.h>
#include <stdlib.h>


#define SIZE 100


struct tableau {
    int number;
    int capacity;
    char ** mot;
};


struct tableau * tableauCreate(int initialCapacity);
void addWord(struct tableau * tableau, char * word);
void doubleCapacity(struct tableau * tableau);
void display(struct tableau * tableau);


struct tableau * tableauCreate(int initialCapacity) {
    struct tableau * tableau;
    tableau = (struct tableau *)malloc(1*sizeof(struct tableau));
    tableau->number = 0;
    tableau->capacity = initialCapacity;
    tableau->mot = (char **)malloc((tableau->capacity)*sizeof(char *));
    return tableau;
}
void addWord(struct tableau * tableau, char * word) {
    int i;
    char * mot;
    tableau->number = tableau->number+1;
    if (tableau->number>tableau->capacity) {
        doubleCapacity(tableau);
    }
    tableau->mot[tableau->number-1] = (char *)malloc((SIZE+1)*sizeof(char));
    mot = tableau->mot[tableau->number-1];
    i = 0;
    while (word[i]!='\0') {
        mot[i] = word[i];
        i = i+1;
    }
    mot[i] = '\0';
}


void doubleCapacity(struct tableau * tableau) {
    tableau->capacity = 2*tableau->capacity;
    tableau->mot = (char **)realloc(tableau->mot, (tableau->capacity)*sizeof(char *));
}
 void display(struct tableau * tableau) {
    int i;
    for (i=0; i<tableau->number; i++) {
        printf("mot %d : %s\n", i, tableau->mot[i]);
    }
}


int main()
{
    struct tableau * tab;
    tab = tableauCreate(2);
    addWord(tab, "alpha");
    addWord(tab, "bravo");
    addWord(tab, "charlie");
    addWord(tab, "delta");
    addWord(tab, "entrer");
    addWord(tab, "facile");
    display(tab);
return 0;
}

Une autruche ne se cuit pas aux petits lardons.
Messages postés
8
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
24 mai 2007

Merci c'est exactement ce que je voulais comprendre.Sais tu comment fonctionne alors la fonction qsort pour trier la liste par ordre alphabetique?
Messages postés
149
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
17 mai 2007
2
Salut,

Je vais pas tout te faire, allez sois un peu plus motivé et essaye de voir si tu peux pas faire quelque chose à partir de la fonction strcmp.

Une autruche ne se cuit pas aux petits lardons.
Messages postés
8
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
24 mai 2007

ok jai fais et ca marche.j'ai meme plutot utiliser un tableau de cractere au lieu d'un fichier.Merci