Guest User

Untitled

a guest
Feb 21st, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.34 KB | None | 0 0
  1. #include<iostream>
  2. #include<string>
  3. #include "StackType.h"
  4. using namespace std;
  5.  
  6. int Precedence(char op);
  7. string Postfix(string infix);
  8.  
  9. int main()
  10. {
  11. string infix;
  12. getline(cin, infix);
  13. cout << Postfix(infix) << endl;
  14.  
  15. return 0;
  16. }
  17.  
  18. string Postfix(string infix)
  19. {
  20. StackType<char> stack;
  21. string postfix;
  22. int i=0;
  23. char token,popped;
  24. bool done;
  25. token = infix[0];
  26. while(token!='=')
  27. {
  28. if(token>='0' && token <='9')
  29. postfix+=token;
  30. if(token==')')
  31. {
  32. popped=stack.Top();
  33. stack.Pop();
  34. while(popped!='(')
  35. {
  36. postfix+=popped;
  37. popped=stack.Top();
  38. stack.Pop();
  39. }
  40. }
  41. if(token=='+' || token=='-' || token=='*' || token=='/' || token=='(' || token=='=')
  42. {
  43. if(token!='(')
  44. {
  45. done=false;
  46. while(!stack.IsEmpty() && !done)
  47. if(Precedence(stack.Top())>=Precedence(token))
  48. {
  49. postfix+=stack.Top();
  50. stack.Pop();
  51. }else
  52. done=true;
  53. }
  54. stack.Push(token);
  55. }
  56.  
  57.  
  58. i++;
  59. token=infix[i];
  60.  
  61.  
  62. }
  63. while(!stack.IsEmpty())
  64. {
  65. postfix+=stack.Top();
  66. stack.Pop();
  67. }
  68. return postfix;
  69. }
  70.  
  71. int Precedence(char op)
  72. {
  73. switch(op)
  74. {
  75. case '/': return 3;
  76. case '*': return 3;
  77. case '+': return 2;
  78. case '-': return 2;
  79. case '(': return 0;
  80. default: return 1;
  81. }
  82. }
Add Comment
Please, Sign In to add comment