begin process at 2012 05 29 08:52:17
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Help sur ma fonction!!!


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Help sur ma fonction!!!

dimanche 5 juin 2005 à 05:33:50 | Help sur ma fonction!!!

benthebest

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;  
  }

  if(isalpha(n->c) || n->c =='\0')
  {
   mot[i]=n->c;
   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++;
    }

    if((temp=(char**)malloc((j+2) * sizeof(char*)))==NULL) printf("Erreur 2");
    for(k=0;k<j;k++)
     temp[k]=t[k];

    t=NULL;
    
   }

   //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;

   /* for(l=0;l<(j+1);l++)
   { printf(" *tab_suffixe[%d] = %s ",l,*tab_suffixe[l]);}*/

  }

  rech_suffixes(n->fils_gauche, tab_suffixe, mot, i, j, k, l, m); 
  rech_suffixes(n->frere, tab_suffixe, mot, i, j, k, l, m); 
 }
}


Voila si vous pouvier me trouver mon bug , je vous en serai sincermeent reocnnaissant...

Merci a vous.

dimanche 5 juin 2005 à 09:35:07 | Re : Help sur ma fonction!!!

Pamaury

Pour nous aider faudrait:
->à quoi correspond 'n','i','j','k','l','m'
->comment est rangé 'tab_suffix'
->la structure 'noeud'
parce que là on, comprend rien avec des i,j,k,l,m qui me paraisse bien suspect avec des noms pareils !!

A m a u r y
dimanche 5 juin 2005 à 10:03:21 | Re : Help sur ma fonction!!!

luhtor

En C++, ca serait plus lisible ton code :) Pour éviter les plantages, utilises les string et non des char*.
dimanche 5 juin 2005 à 10:53:18 | Re : Help sur ma fonction!!!

BruNews

Administrateur CodeS-SourceS
Intéressant comme conseil, en poussant un peu il pourrait même le faire en VB, non ?

ciao...
BruNews, MVP VC++
dimanche 5 juin 2005 à 15:23:46 | Re : Help sur ma fonction!!!

benthebest

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;  
  }

  if(isalpha(n->c) || n->c =='\0')
  {
   mot[i]=n->c;
   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++;
    }

    if((temp=(char**)malloc((j+2) * sizeof(char*)))==NULL) printf("Erreur 2");
    for(k=0;k<j;k++)
     temp[k]=t[k];

    t=NULL;
    
   }

   //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!!

dimanche 5 juin 2005 à 18:43:11 | Re : Help sur ma fonction!!!

vecchio56

Administrateur CodeS-SourceS
Si c'est du C, les cast devant le malloc ne servent a rien


Cette discussion est classée dans : mot, temp, tab, char, suffixe


Répondre à ce message

Sujets en rapport avec ce message

Arbre Binaire. Probleme de concatenation [ par YnOThAr ] Bonjour tout le monde ! La fin de l'année arrive et avec elle vient la fin des projets...généralement inachevés. En ce moment je travail sur la compre comparaison d'entiers [ par blinix123 ] Bonjour,Alors petit problème facile pour vous je pense :struct cd{ char realisateur [64]; char titre [64]; char date [20]; char duree [64];}; void conversion [ par anubis52100 ] je souhaiterai conaitre le code pour convertir un CString en Char*voila se que j'ai fait mais jarive pas a convertir strNom en char*j'y arive mais qua mot apés mot [ par logant83 ] Bonsoir, voila enfaite j'ai coder un truc pour pouvoir stocker les mots d'une chaine char dans plusieur variable. En gros le premier mot est dans la v Problème avec delete[] [ par gbourgeois0019 ] SalutJ'ai un petit problème. voici le code :char* Temp = new char[100];char* Title = new char[100];strcpy(Temp,"Exemple");Title = Temp + 1 ;delete[] T Assosier 2 chaine de caractere PB :s [ par Booster ] Bonjour,Alors voila je veux tout simplement assosier 2 chaines de caractere mais jaimerais le faire sans passer par une variables intermediaire je m'e pointeur structure & héritage [ par Kurpeus1 ] Bonjour et joyeuses fêtes a tous ^^J'ai un problème. J'ai une fonction qui vient lire des paramètres dans un fichier de configuration. Celle ci vient votre avis sur une fonction de split... [ par Matt67 ] Bonsoir,Je dois faire une fonction de "splitage" de chaine. J'ai realisé ce bout de code et j'aimerais votre avis. La fonction n'est pas tout a fait f je ne comprend pas [ par lektrosonic ] Pourquoi a la fin du for, run_config ne vaut pas 1 mais 951742 ??void load_lang(){              auto int i;       auto char temp_buffer[MAX_PATH];     besoin d'aide avec les tableaux [ par ndubien ] Bonjour,Je cherche à savoir:Comment connaître le nombre de lignes d'un tableau (char **tab, char tab[64][32]) ?Merci d'avance et à b


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,200 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales