Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.57 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <cstdlib>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. bool num(char c)
  9. {
  10. return (c >= '0' && c <= '9');
  11. }
  12.  
  13. bool is_op(char c)
  14. {
  15. return (c=='+' || c=='-' || c=='*' || c=='/');
  16. }
  17.  
  18. int get_num(char *s)
  19. {
  20. return atoi(s);
  21. }
  22.  
  23. void seti(char *s,int& i)
  24. {
  25. while (num(s[i]))
  26. i++;
  27. i--;
  28. }
  29.  
  30. void process_op(vector<int>& st, char op)
  31. {
  32. int r = st.back(); st.pop_back();
  33. int l = st.back(); st.pop_back();
  34. switch (op) {
  35. case '+': st.push_back(l + r); break;
  36. case '-': st.push_back(l - r); break;
  37. case '*': st.push_back(l * r); break;
  38. case '/': st.push_back(l / r); break;
  39. case '%': st.push_back(l % r); break;
  40. }
  41. }
  42.  
  43. int priority(char op)
  44. {
  45. if (op == '+' || op == '-')
  46. return 1;
  47. if (op == '*' || op == '/')
  48. return 2;
  49. return -1;
  50. }
  51.  
  52. int main()
  53. {
  54. char s[255];
  55. cin >> s;
  56. vector<int> st;
  57. vector<char> op;
  58. for (int i = 0; i < strlen(s); i++)
  59. {
  60. if (s[i] == '(')
  61. op.push_back('(');
  62. else
  63. if (s[i] == ')')
  64. {
  65. while(op.back() != '(')
  66. {
  67. process_op(st,op.back());
  68. op.pop_back();
  69. }
  70. op.pop_back();
  71. }
  72. else
  73. if (is_op(s[i]))
  74. {
  75. char curop = s[i];
  76. while (!op.empty() && priority(op.back()) >= priority(curop))
  77. {
  78. process_op(st,op.back());
  79. op.pop_back();
  80. }
  81. op.push_back(curop);
  82. }
  83. else
  84. {
  85. int num = get_num(s+i);
  86. seti(s,i);
  87. st.push_back(num);
  88. }
  89. }
  90.  
  91. while (!op.empty())
  92. {
  93. process_op(st,op.back());
  94. op.pop_back();
  95. }
  96.  
  97. cout << st.back() << '\n';
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement