Soulfly_tribe90 Posté(e) le 19 décembre 2005 Partager Posté(e) le 19 décembre 2005 Voila en fait un utilisateur va taper une expression arithmétique complétement parenthésée du genre : (2*(3+4)) Et donc moi j'aimerais réussir à récupérer de telle sorte que chaques caractères soit independant car je dois pouvoir les évaluer un par un pour les stocker dans une pile pour ensuite faire les operations a faire dessus. Donc en gros j'aurais --> dans chaque case de ma pile une parenthèse, une operande ou encore un operateur... J'espère que j'ai été assez clair. Merci d'avance Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nis Posté(e) le 19 décembre 2005 Partager Posté(e) le 19 décembre 2005 Ca ne fonctionne pas simplemement avec quelque chose du genre ? : char * c = "(2*(3+4)"; cout << c[0]; // Affiche ( Lien vers le commentaire Partager sur d’autres sites More sharing options...
Soulfly_tribe90 Posté(e) le 19 décembre 2005 Auteur Partager Posté(e) le 19 décembre 2005 Je ne pense pas... Cout je crois que c'est en C++ non ??? En tout cas j'en ai jamais vu en C encore... Sinon le (2*(3+4)) est tapé par l'utilisateur comme sur une calculatrice donc je comprend pas trop ta ptite partie. Tu veux l'enregistrer en tant que chaine de caractère ??? Lien vers le commentaire Partager sur d’autres sites More sharing options...
neologix Posté(e) le 19 décembre 2005 Partager Posté(e) le 19 décembre 2005 Je ne comprends pas bien ce que tu veux faire. Tu les entre sous quelle forme tes expressions? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nis Posté(e) le 19 décembre 2005 Partager Posté(e) le 19 décembre 2005 Heu oui :) Je pensais que tu devais le faire en C++ (je dois faire la même chose en C++). Oui, j'avais dans l'idée que ce que la personne tapait serait traîté ensuite comme une chaine de caractère. Après il suffirait de faire un truc du genre pile->push_pile(c[0]), pour remplir ta pile. Comme ça : char bufstr [60]; scanf ("%s",bufstr); printf ("%s\n",bufstr); printf ("%c\n",bufstr[0]); Lien vers le commentaire Partager sur d’autres sites More sharing options...
Soulfly_tribe90 Posté(e) le 19 décembre 2005 Auteur Partager Posté(e) le 19 décembre 2005 Neologix je te met le sujet en entier comme ca tu comprendra peut etre un peu mieux... Specifier puis programmer en C une fonction pour evaluer, en calculs sur les entiers, une expression arithmetique. Celle-ci se presente sous la forme d'une suite d'entiers naturels sur un seul chiffre decimal, d'operateurs binaires parmi = - * / et des parentheses ( et ). La suite est supposée correctement et complétement parenthésée. Tous les caractéres sont entrés successivement au clavier. On definira cette evaluation de maniere recursive sur les entrées, puis iterative, en utilisant une seule PILE contenant operandes et operateurs codés de maniere convenable. Mais on ne programmera qu'une seule version. On suppose connues les operations usuelles sur les caractéres. En fait je viens de realiser un truc en relisant et en tapant : Tous les caractéres sont entrés successivement au clavier --> ca veut dire que l'utilisateur tape un caractere et que l'on evalue directement ou bien c bien comme je l'ai di il tape tout et apres on evalue... Parce que dans le premier cas avec un getchar finalement ca passe tres bien nonn ??? Lien vers le commentaire Partager sur d’autres sites More sharing options...
neologix Posté(e) le 19 décembre 2005 Partager Posté(e) le 19 décembre 2005 Oui, tu créés une chaîne de caractères, et ensuite tu la remplit avec des getchar. while((ch = getchar()) != '\n') buf[i++] = ch; Ou alors tu utilises fgets: fgets(char, sizeof(char), stdin) Mais là il faut virer le '\n' à la main. Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 19 décembre 2005 Partager Posté(e) le 19 décembre 2005 moi je lis "Tous les caractéres sont entrés successivement au clavier." , c'est à dire comme sur un calculatrice... donc un série de fgets que tu parse joyeusement pour savoir si c'est une parenthese, un opérateur ou une opérande (que tu analyse avec atoi() ) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Soulfly_tribe90 Posté(e) le 20 décembre 2005 Auteur Partager Posté(e) le 20 décembre 2005 Merci bien je vais essayer de voir ca tranquilement et je vous tiendrais au courant Lien vers le commentaire Partager sur d’autres sites More sharing options...
Baldurien Posté(e) le 20 décembre 2005 Partager Posté(e) le 20 décembre 2005 tu as bison/flex pour ça aussi... flex te fera exactement ce que tu veux à partir de regexp, tandis que Bison te fera l'analyseur syntaxique en fonction de tes besoins.. http://www.gnu.org/software/bison/manual/h...n.html#Examples Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.