Se connecter avec
S'enregistrer | Connectez-vous

Chaine de caractere : arbre

Dernière réponse : dans Programmation

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:


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



Autres pages sur : chaine caractere arbre

Lassé par la pub ? Créez un compte
Lassé par la pub ? Créez un compte