benthebest
Messages postés42Date d'inscriptiondimanche 2 février 2003StatutMembreDernière intervention 1 août 2008
-
5 juin 2005 à 05:33
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 2010
-
5 juin 2005 à 18:43
hello a tous
Voila je taffe depuis plus d'une semaine sur ma fonction et je vais m'arracher la tete...
Elle marche sous Visual C++ et pas sur Dev c++ et je dois absolument la faire marcher sous Dev c++..
Je vous explique brievement, c'une fonction qui sert a recuperer dans un tableau remplit dynamiquement plusieurs mots à partir d'un arbre binaire (ces mots constituent des suffixes, par exemple , si dans mon fichier jai le mot "allo" et que l'utilisateur tape "a" , et bien ma fonction est sense remplir mon tableau avec le suffixe "llo" !).
voici ma fonction :
void rech_suffixes(noeud* n,char*** tab_suffixe, char *mot,int i,int j, int k, int l,int m)//parcours ordre prefixe pr trouver la completion, a partir dun noeud determine
{
char** t=NULL,** temp=NULL;
if(n!=NULL)
{
if(n->index_autre_mot!=-1) //si il existe un marqueur sur ce noeud, donc je le recupere et mot continuera a partir de cet indice
{
i=n->index_autre_mot;
//je reinitilise a 0 la suite de mot
memset ( mot+i, 0, 30-i );
}
if(n->frere!=NULL && n->frere->index_autre_mot==-1)
{
//n->c;
//je marque le frere de lindice de mot[] ou je
//devrai reprendre pr continuer la completion
n->frere->index_autre_mot=i;
}
//si j'arrive a une fin de caractere ET qu'il y a bien un VRAI suffixe de trouvé
//(et pas seulement un '\0' pour suffixe):
//if((n->c=='\0')&&(i!=1))
if(n->c=='\0')
{
//Procedure d'allocation dynamique:
//si t est completement vide:
if ((j==0) && (*tab_suffixe==NULL))
{
//j'en alloue un de plus pr ke le dernier puisse etre initialiser a NULL
/****QD JE MET ICI UN SYSTEM("pause"); CA PLANTE ET JE C VRT PAS PKOI!!****/
if((temp=(char**)malloc(2*sizeof(char*)))==NULL) printf("Erreur 1");
}
else
{
t=*tab_suffixe;
//je trouve le dernier indice libre pr enregistrer ce suffixe ds tab
while(t[j]!=NULL)
{
j++;
}
benthebest
Messages postés42Date d'inscriptiondimanche 2 février 2003StatutMembreDernière intervention 1 août 2008 5 juin 2005 à 15:23
Desole c vrai ke ils servent a rien c variable i,j,k,m
voici la bonne fonction :
void rech_suffixes(noeud* n,char*** tab_suffixe, char *mot,int i,int j, int k)//parcours ordre prefixe pr trouver la completion, a partir dun noeud determine
{
char** t=NULL,** temp=NULL;
if(n!=NULL)
{
if(n->index_autre_mot!=-1) //si il existe un marqueur sur ce noeud, donc je le recupere et mot continuera a partir de cet indice
{
i=n->index_autre_mot;
//je reinitilise a 0 la suite de mot
memset ( mot+i, 0, 30-i );
}
if(n->frere!=NULL && n->frere->index_autre_mot==-1)
{
//n->c;
//je marque le frere de lindice de mot[] ou je
//devrai reprendre pr continuer la completion
n->frere->index_autre_mot=i;
}
//si j'arrive a une fin de caractere ET qu'il y a bien un VRAI suffixe de trouvé
//(et pas seulement un '\0' pour suffixe):
if(n->c=='\0')
{
//Procedure d'allocation dynamique:
//si t est completement vide:
if ((j==0) && (*tab_suffixe==NULL))
{
/*************************************************************************/
/******CA BUG ICI QD ON FAIT UN system("pause"); et je c vrt pas pkoi!!! *******/
/****************************************************************************/
//j'en alloue un de plus pr ke le dernier puisse etre initialiser a NULL
if((temp=(char**)malloc(2*sizeof(char*)))==NULL) printf("Erreur 1");
}
else
{
t=*tab_suffixe;
//je trouve le dernier indice libre pr enregistrer ce suffixe ds tab
while(t[j]!=NULL)
{
j++;
}
//jalloue une nvelle ligne pour tab afin dy mettre le nouveau suffixe:
if((temp[j]=(char*)malloc(i * sizeof(char)))==NULL) printf("Erreur 4");
//je copie
strcpy(temp[j],mot);
//je met null pr la prochaine ligne
temp[j+1]=NULL;
//le triple pointeur tab_suffixe pointe sur t et t sur NULL:
*tab_suffixe=temp;
temp=NULL;
}
rech_suffixes(n->fils_gauche, tab_suffixe, mot, i, j, k);
rech_suffixes(n->frere, tab_suffixe, mot, i, j, k);
}
}
Qd j'appel la fonction, ca donne :
rech_suffixes(n,&tab_suffixe,suffixe,0,0,0);
Avec, comme declaration au debut :
char*** tab_suffixe=NULL, suffixe[30];
noeud* n;
voici la structure noeud :
typedef struct noeud{
char c;//le caractere
struct noeud* fils_gauche;//fils, continuite du mot
struct noeud* frere;//frere, autre mot
int index_autre_mot;//a cette index, il y a un autre mot ,si -1, le frere=null
}noeud;
Le n de rech_suffixe() designe le noeud qui contient la lettre suivant le prefixe tapé, exemple:
si ds mon fichier jai le mot "allo" et ke l'utilisateur" a tape "a" et bien n renverra le noeud suivant le "a" cad , le noeud pointant sur "l" ...
Et au fait c'est pas du C++ mais c'est du C !!!
Merci à vous!!
Vous n’avez pas trouvé la réponse que vous recherchez ?