Chaine de caractere : arbre

nberraoui

Nouveau membre
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:


[cpp]

enum Type {Operateur, Constante, Variable};


union Info
{
double cte;
char *nom;
char op;
};

struct noeud{
enum Type type;
union Info info;
struct noeud *gauche;
struct noeud *droit;
};

typedef struct noeud Noeud;
typedef struct noeud * Expression;



Expression AnalyseExpression(char **ligne)
{

Expression e;
char c;
char *place;
int cnt;


while(**ligne == ' ') (*ligne)++;

/* on est en fin de chaine */
if(**ligne == '\0')
{
fprintf(stderr,"erreur : il doit manquer des operandes\n");
return NULL;
}

e = (Expression)malloc(sizeof(Noeud));
if(e == NULL) return e;

/* c'est un chiffre */
if(isdigit(**ligne))
{
e->type = Constante;
sscanf(*ligne,"%lf ",&(e->info.cte));
while(isdigit(**ligne) || **ligne == '.') (*ligne)++;
}

else
{
/* c'est une lettre */
if(isalpha(**ligne))
{
/* Calcule de la taille du nom de la variable */
cnt = 0;
place = *ligne;

while( (*place != '\0') && (*place != ' ') )
{
/* compter le nombre de caractere de cette variable */
cnt++;
place++;
}
e->type = Variable;
e->info.nom = (char *) malloc(cnt*sizeof(char));
sscanf(*ligne,"%s ",e->info.nom);
/* while(isalpha(**ligne)) (*ligne)++; */
}
else
{
/* le caractere est un operateur */
c=*((*ligne)++);
if(c == '+' || c == '-' || c == '*' || c == '/')
{
e->type = Operateur;
e->info.op = c;
e->gauche = AnalyseExpression(ligne);
e->droit = AnalyseExpression(ligne);
}
else if(c == '@' || c == '~')
{
e->type = Operateur;
e->info.op = c;
e->gauche = AnalyseExpression(ligne);
e->droit = NULL;
}
else printf("Erreur,'%c' n'est pas un operateur prevu\n",c);
}
}
return e;
}[/cpp]


 

KangOl

Grand Maître
1/ la prochaine fois, précise le language ;)
2/ et alors c'est quoi le problème ?
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 056
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut