Bonjour , je vous explique vite fait ce que je dois faire :
J'ai un fichier texte, dans le quel on doit trier des mots ..
la premier étape est => ouverture d'un fichier
la deuxieme étape est => lit mot par mot et rentre le dans un tableau
si il est present ajoute à la frequence plus 1
sinon ajoute le au tableau
Il y a une erreur mais je ne la trouve pas
Voici le code source
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
/*
-------------------------------------Declaration--------------------------------
*/
int trouve;
int N,i;
char word[256]; // word est le mot lu
struct mot_frequence
{
char mot[180000];
int frequence;
};
struct mot_frequence tableau[10000];
FILE *f1;
/*
----------------------Commande l'ouverture d'un fichier-------------------------
*/
void ouverture (FILE *f)
{
char fichier[32];
FILE *f1=NULL;
while (f==NULL)
{
printf ("Entrer le chemin du fichier\n");
scanf ("%s",fichier);
f=fopen(fichier,"r");
if (f==NULL)
{
printf ("/!\ Erreur: Probleme d'ouverture en lecture /!\ ");
}
else
{
printf ("Ouverture reussite !! \n ");
printf ("\n");
}
}
}
/*
---------- Renvoie la position du dernier octets du flot stream-----------------
*/
long filesize(FILE *stream)
{
long curpos,length;
curpos =
ftell(stream);
// garder la position courante
fseek(stream, 0, SEEK_END);
// on place le curseur a la fin
length = ftell(stream);
// on prend le
nombre de caractères dans la fichier (ie la taille)
fseek (stream, curpos, SEEK_SET); // on remet comme c'était au début
return length;
// on retourne la taille du fichier (en octet ie en
nombre de char)
}
/*
-----------------------------Detecte la ponctuation-----------------------------
*/
int estseparateur(char c)
{
char sep[]=".,;:!?\n\t\r\'\"\[]\0";
char *sz;
sz=sep;
while(*sz!=0)
{
if(c==*sz) return
1; // c est un caractere
séparateur, on renvoie donc true
sz++;
}
return 0;
// c n'est pas un caractère séparateur, on renvoie
donc false
}
/*
----------Converti Majuscule => Minscule + retire la ponctuation----------------
*/
void convert(char tab [])
{
char *sz;
sz=tab;
while(*sz != 0)
{
if(('A' <=
*sz)&&(*sz<='Z')) // si le pointeur fait parti des
majuscules compris entre A et Z alors remplace le par une minusule
*sz = 'a' + (*sz - 'A');
if(estseparateur(*sz)==1) *sz='
'; //si le caractere est un separateur remplace le par un espace
sz++;
}
}
/*
------------------------------Comptage des mots---------------------------------
*/
void comptage(FILE *f)
{
int i=0;
int N=0; // N étant le nombre de mot
char word[32];
for(i=0,N=0; !feof(f); i++)
{
fscanf(f, "%s", word);
//printf("word=%s\n",word); pour verifier si il affiche bien les mots
N++;
}
}
/*
-------------------------------Programme principale-----------------------------
*/
int main()
{
trouve == 1;
ouverture(f1);
//comptage(f1); <= fonctionne pas
/**
*** EXTRACTION
**/
for(i=0;feof(f1);i++)
{
fscanf(f1, "%s", word); // prend un mot et met le dans le tableau word
convert(word); // enleve les majuscules et la ponctuation
if ( strcmp ((char *)
word,tableau[i].mot) ) // Regarde si le mot est pas déjà dans le tableau
{
trouve = 1; // si oui
tableau[i].frequence++; // augmente sa frequence de + 1
}
else
{
strcpy (word,tableau[i].mot); // sinon ajoute le au tableau
tableau[i].frequence++; // et augment sa frequence
}
printf ("%s : %d",tableau[i].mot,tableau[i].frequence); // affiche le resultat
}
return 0;
system("pause");
}
Voici mon mail : lacharlottinne@aol.com
et mon adresse msn : lacharlottinne@hotmail.com ( si vous preferez passer par la pour m'aider :)
Je vous remercie beaucoup :)