Advertisement
Coder_22

Postfix & 3AC

Jan 3rd, 2025 (edited)
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.81 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int precedence(string c) {
  5. //    cout << c << '\n';
  6.     if (c == "^") return 4;
  7.     if (c == "/" or c == "*") return 3;
  8.     if (c == "+" or c == "-") return 2;
  9.     else return 1;
  10. }
  11.  
  12. int operation(int b, int a, char c) {
  13.     if (c == '+') return a + b;
  14.     if (c == '-') return a - b;
  15.     if (c == '*') return a * b;
  16.     if (c == '/') return a / b;
  17.     else return pow(a, b);
  18. }
  19.  
  20. int stoint(string s) {
  21.     int n = 0;
  22.     for (auto c : s) {
  23.         n = n * 10 + (c - '0');
  24.     }
  25.     return n;
  26. }
  27.  
  28. int main() {
  29.     cout << "Enter the space separated expression: ";
  30.     string s; getline(cin, s);
  31. //    cout << s << endl; 2 + 3 + 4    (2 * 6 / 3) - (3 * 1)
  32.     string postfix;
  33.     stack<string> sk; int c = 0;
  34.     while (c < s.size()) {
  35.         if (s[c] == ' ') {
  36.             ++c; continue;
  37.         }
  38.         string st;
  39.         while (isalnum(s[c])) {
  40.             st.push_back(s[c]); ++c;
  41.         }
  42.         if (!st.empty()) {
  43.             postfix += st; postfix.push_back(' ');
  44.         }
  45.         else {
  46.             string r = s[c];
  47.             if (r == "-" and isalnum(s[c + 1])) {
  48.                 st.clear(); st.push_back('-'); ++c;
  49.                 while (isalnum(s[c])) {
  50.                     st.push_back(s[c]); ++c;
  51.                 }
  52.                 postfix += st; postfix.push_back(' ');
  53.                 continue;
  54.             }
  55.             if (sk.empty() or sk.top() == "(" or precedence(r) > precedence(sk.top())) sk.push(r));
  56.             else if (c == '(') sk.push(r);
  57.             else if (c == ')') {
  58.                 while (sk.top() != "(") {
  59.                     postfix += sk.top(); postfix.push_back(' '); sk.pop();
  60.                 }
  61.                 sk.pop();
  62.             }
  63.             else {
  64.                 while (!sk.empty() and precedence(sk.top()) >= precedence(r)) {
  65.                     postfix += sk.top(); postfix.push_back(' '); sk.pop();
  66.                 }
  67.                 sk.push(r);
  68.             }
  69.         }
  70.         ++c;
  71.     }
  72.     while (!sk.empty()) {
  73.         postfix += sk.top(); postfix.push_back(' '); sk.pop();
  74.     }
  75.     cout << "The postfix notation is: " << postfix << endl;
  76.  
  77. //    stack<int> sk1; int i = 0;
  78. //    while (i < postfix.size()) {
  79. //        if (postfix[i] == ' ') {
  80. //            ++i; continue;
  81. //        }
  82. //        string st;
  83. //        while (postfix[i] >= '0' and postfix[i] <= '9') {
  84. //            st.push_back(postfix[i]); ++i;
  85. //        }
  86. //        if (!st.empty()) sk1.push(stoint(st));
  87. //        else {
  88. //            int a = sk1.top(); sk1.pop(); int b = sk1.top(); sk1.pop();
  89. //            int t = operation(a, b, postfix[i]); sk1.push(t); ++i;
  90. ////            cout << a << ' ' << b << ' ' << t << endl;
  91. //        }
  92. //    }
  93. //    cout << "The result is: " << sk1.top() << endl;
  94.     return 0;
  95. }
  96.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement