http://www.cs.man.ac.uk/~pjj/cs2121/fix.html
class Notations { string fnk; char[] oparray = { '+', '-', '/', '*', '^' }; public Notations(string infix) { this.fnk = infix; } bool operandmi(char cr) { int i = 0; while (i<5) { if (cr == oparray[i]) return true; } return false; } public string prefix() { string asd = fnk; StackOpStack = new Stack (); Stack PrefixStack = new Stack (); int i = asd.Length-1; while (i>=0) { char cr = asd[i]; if (cr > 47 && cr < 58) { PrefixStack.Push(cr); PrefixStack.Push(','); i--; } else { int j = 0; while ( j<5 && cr!=oparray[j] ) { j++; } if (j != 5) { OpStack.Push(cr); i--; } else { if (cr == ')') { OpStack.Push(')'); i--; } else { if (cr == '(') { char cr2; do { cr2=OpStack.Pop(); if (cr2 != ')') PrefixStack.Push(cr2); } while (cr2==')'); OpStack.Pop(); i--; } } } } } while (OpStack.Count!=0) { PrefixStack.Push(OpStack.Pop()); } StringBuilder bl = new StringBuilder(); while (PrefixStack.Count!=0) { bl.Append(PrefixStack.Pop()); } return bl.ToString(); } }
Hiç yorum yok:
Yorum Gönder