FORUM Tom's Hardware » Programmation » C / C++ / Java » Chaine de caractere : arbre
 

Chaine de caractere : arbre

Il y a 452 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Chaine de caractere : arbre
 
Plus d'informations

Bonjour,

j'aurais besoin d'aide pour le problème suivant.
Je dois créer une fonction qui lit une chaine de caractère et construit autant d'arbre que possible.
Par exemple :
si la chaine que j'entre est: + 1 2 - * 3 7 x
la fonction doit me créer 2 arbres: + 1 2 et - * 3 7 x.
J'ai crée la fonction que voici qui me permet de créer un arbre mais comment faire pour en créer plusieurs?

Merci

Voici le code:


Code :
  1. enum Type {Operateur, Constante, Variable};
  2. union Info
  3. {
  4.   double cte;
  5.   char *nom;
  6.   char op;
  7. };
  8. struct noeud{
  9.   enum Type type;
  10.   union Info info;
  11.   struct noeud *gauche;
  12.   struct noeud *droit;
  13. };
  14. typedef struct noeud Noeud;
  15. typedef struct noeud * Expression;
  16. Expression AnalyseExpression(char **ligne)
  17. {
  18.  
  19.   Expression e;
  20.   char c;
  21.   char *place;
  22.   int cnt;
  23.  
  24.  
  25.   while(**ligne == ' ') (*ligne)++;
  26.  
  27.   /* on est en fin de chaine */
  28.   if(**ligne == '\0')
  29.     {
  30.       fprintf(stderr,"erreur : il doit manquer des operandes\n" );
  31.       return NULL;
  32.     }
  33.  
  34.   e = (Expression)malloc(sizeof(Noeud));
  35.   if(e == NULL) return e;
  36.  
  37.   /* c'est un chiffre */
  38.   if(isdigit(**ligne))
  39.     {
  40.       e->type = Constante;
  41.       sscanf(*ligne,"%lf ",&(e->info.cte));
  42.       while(isdigit(**ligne) || **ligne == '.') (*ligne)++;
  43.     }
  44.  
  45.   else
  46.     {
  47.       /* c'est une lettre */
  48.       if(isalpha(**ligne))
  49.     {
  50.       /* Calcule de la taille du nom de la variable */
  51.       cnt = 0;
  52.       place = *ligne;
  53.      
  54.       while( (*place != '\0') && (*place != ' ') )
  55.         {
  56.           /* compter le nombre de caractere de cette variable */
  57.           cnt++;
  58.           place++;
  59.         }
  60.       e->type = Variable;
  61.       e->info.nom = (char *) malloc(cnt*sizeof(char));
  62.       sscanf(*ligne,"%s ",e->info.nom);
  63.       /*  while(isalpha(**ligne)) (*ligne)++; */
  64.     }
  65.       else
  66.     {
  67.       /* le caractere est un operateur */
  68.       c=*((*ligne)++);
  69.       if(c == '+' || c == '-' || c == '*' || c == '/')
  70.         {
  71.           e->type = Operateur;
  72.           e->info.op = c;
  73.           e->gauche = AnalyseExpression(ligne);
  74.           e->droit = AnalyseExpression(ligne);
  75.         }
  76.       else if(c == '@' || c == '~')
  77.         {
  78.           e->type = Operateur;
  79.           e->info.op = c;
  80.           e->gauche = AnalyseExpression(ligne);
  81.           e->droit = NULL;
  82.         }
  83.       else printf("Erreur,'%c' n'est pas un operateur prevu\n",c);
  84.     }
  85.     }
  86.   return e;
  87. }




Profil : Pointeur
Plus d'informations

1/ la prochaine fois, précise le language ;)
2/ et alors c'est quoi le problème ?


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u

Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » C / C++ / Java » Chaine de caractere : arbre
 

Annonces Google