2012-04-03 4 views
0

J'ai une affectation pour créer une notation postfix à partir de l'infixe. J'ai obtenu le code qui fonctionne correctement et j'ai une chaîne de la notation postfix, mais je ne suis pas sûr de savoir comment obtenir la réponse. Existe-t-il une méthode .NET que je peux appeler? J'ai essayé de googler le problème et je peux seulement trouver comment le changer pour poster un correctif.Résolution d'une expression de notation postfixe dans C#

Toute aide est très appréciée.

Mise à jour Je devais trouver la réponse à une expression telle que: 12 + 3-4 + 5-

J'espérais trouver un moyen plus facile de faire cela, mais je ne l'ai pas donc j'écrit mon propre méthode à. Je le posterai dans 8 heures quand je suis autorisé à le faire.

+0

Pouvez-vous reformuler votre requête avec plus de détails? – Pankaj

+0

Une méthode pour faire quoi? – harold

+0

Dois-je écrire ma propre méthode pour résoudre l'expression ou y a-t-il une classe intégrée que je peux utiliser pour la résoudre? –

Répondre

1

Postfix est l'expression dans une chaîne comme "10 9 + 7% 3 -"

postfix = postfix.Trim(); 
       string[] ans = postfix.Split(' '); 
       Stack<int> eval = new Stack<int>(); 
       for (int x = 0; x < ans.Length; x++) 
       { 
        if ("*+%/-".Contains(ans[x])) 
        { 
         int temp1; 
         int temp2; 

         switch (ans[x]) 
         { 
          case ("*"): 
           eval.Push(eval.Pop() * eval.Pop()); 
           break; 
          case "-": 
           temp1 = eval.Pop(); 
           temp2 = eval.Pop(); 
           eval.Push(temp2 - temp1); 
           break; 
          case "%": 
           temp1 = eval.Pop(); 
           temp2 = eval.Pop(); 
           eval.Push(temp2 % temp1); 
           break; 
          case "+": 
           eval.Push(eval.Pop() + eval.Pop()); 
           break; 
          case "/": 
           temp1 = eval.Pop(); 
           temp2 = eval.Pop(); 
           eval.Push(temp2/temp1); 
           break; 
         } 

        } 
        else 
         eval.Push(Convert.ToInt32(ans[x])); 
       } 

// Couper le code trop tôt. une fois l'instruction for exécutée, la réponse sera int answer = eval.Pop();

0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Collections; 

namespace pof 
{ 
    class eva 
    { 
     public string po; 
     public string answer; 
     Stack i = new Stack(); 
     public void e() 
     { 
      int a, b, ans; 
      for (int j = 0; j < po.Length; j++) 
      { 
       String c = po.Substring(j, 1); 
       if (c.Equals ("*")) 
       { 
        String sa = (String)i.Pop(); 
        String sb = (String)i.Pop(); 
        a = Convert.ToInt32(sb); 
        b = Convert.ToInt32(sa); 
        ans = a * b; 
        i.Push(ans.ToString()); 

       } 
       else if (c.Equals("/")) 
       { 
        String sa = (String)i.Pop(); 
        String sb = (String)i.Pop(); 
        a = Convert.ToInt32(sb); 
        b = Convert.ToInt32(sa); 
        ans = a/b; 
        i.Push(ans.ToString()); 
       } 
       else if (c.Equals("+")) 
       { 
        String sa = (String)i.Pop(); 
        String sb = (String)i.Pop(); 
        a = Convert.ToInt32(sb); 
        b = Convert.ToInt32(sa); 
        ans = a + b; 
        i.Push(ans.ToString()); 

       } 
       else if (c.Equals("-")) 
       { 
        String sa = (String)i.Pop(); 
        String sb = (String)i.Pop(); 
        a = Convert.ToInt32(sb); 
        b = Convert.ToInt32(sa); 
        ans = a - b; 
        i.Push(ans.ToString()); 

       } 
       else 
       { 
        i.Push(po.Substring(j, 1)); 
       } 
      } 
      answer=(String)i.Pop(); 
     } 
    } 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      eva e1 = new eva(); 
      Console.WriteLine("enter any postfix expression"); 
      e1.po = Console.ReadLine(); 
      e1.e(); 
      Console.WriteLine("\n\t\tpostfix evaluation: " + e1.answer); 
      Console.ReadKey(); 
     } 
    } 
} 
+0

Ce serait bien si vous pouviez ajouter une courte explication à votre solution. Cela rendrait votre réponse plus complète. Une réponse complète a plus de chances d'être upvoted. – honk

Questions connexes