Taille Fichier avec malloc et realloc

cs_halima Messages postés 8 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 24 mai 2007 - 4 mai 2007 à 00:43
cs_halima Messages postés 8 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 24 mai 2007 - 8 mai 2007 à 22:14
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

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
4 mai 2007 à 12:07
0
cs_halima Messages postés 8 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 24 mai 2007
4 mai 2007 à 20:20
Merci!!!
0
emmatopiak Messages postés 149 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 17 mai 2007 2
4 mai 2007 à 21:37
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.


 


@+++
0
cs_halima Messages postés 8 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 24 mai 2007
5 mai 2007 à 22:08
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
emmatopiak Messages postés 149 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 17 mai 2007 2
5 mai 2007 à 22:51
Ok, je te fais le code, ainsi tu auras une idée..
Bouge pas.

Une autruche ne se cuit pas aux petits lardons.
0
emmatopiak Messages postés 149 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 17 mai 2007 2
5 mai 2007 à 23:06
#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.
0
cs_halima Messages postés 8 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 24 mai 2007
5 mai 2007 à 23:17
Merci c'est exactement ce que je voulais comprendre.Sais tu comment fonctionne alors la fonction qsort pour trier la liste par ordre alphabetique?
0
emmatopiak Messages postés 149 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 17 mai 2007 2
8 mai 2007 à 10:05
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.
0
cs_halima Messages postés 8 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 24 mai 2007
8 mai 2007 à 22:14
ok jai fais et ca marche.j'ai meme plutot utiliser un tableau de cractere au lieu d'un fichier.Merci
0
Rejoignez-nous