Advertisement
erfanul007

224. Basic Calculator

Nov 20th, 2022
1,407
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.20 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     vector<string> ConvertToPostfix(string s){
  4.         vector<string> pp;
  5.         stack<char> op;
  6.         string num = "";
  7.         for(int i=0; i<s.size(); i++){
  8.             if(isdigit(s[i])) num += s[i];
  9.             else{
  10.                 if(num.size() > 0) pp.push_back(num);
  11.                 num = "";
  12.                 if(s[i] == '(') op.push('(');
  13.                 else if(s[i] == ')'){
  14.                     while(op.top() != '('){
  15.                         string ss = "";
  16.                         ss += op.top();
  17.                         pp.push_back(ss);
  18.                         op.pop();
  19.                     }
  20.                     op.pop();
  21.                 }
  22.                 else if(s[i] == '+' || s[i] == '-'){
  23.                     while(!op.empty() && (op.top()=='+' || op.top()=='-')){
  24.                         string ss = "";
  25.                         ss += op.top();
  26.                         pp.push_back(ss);
  27.                         op.pop();
  28.                     }
  29.                     op.push(s[i]);
  30.                 }
  31.             }
  32.         }
  33.         if(num.size() > 0) pp.push_back(num);
  34.         while(!op.empty()){
  35.             string ss = "";
  36.             ss += op.top();
  37.             pp.push_back(ss);
  38.             op.pop();
  39.         }
  40.         return pp;
  41.     }
  42.  
  43.     int calcPostfix(vector<string>& pp){
  44.         stack<int> st;
  45.         for(auto it : pp){
  46.             if(it == "+" || it == "-"){
  47.                 int num = st.top();
  48.                 st.pop();
  49.                 int num2 = st.top();
  50.                 st.pop();
  51.                 if(it == "+") st.push(num + num2);
  52.                 else st.push(num2 - num);
  53.             }
  54.             else st.push(stoi(it));
  55.         }
  56.         return st.top();
  57.     }
  58.     int calculate(string s) {
  59.         string ss = "";
  60.         for(int i=0; i<s.size(); i++){
  61.             if(s[i] != ' ') ss += s[i];
  62.         }
  63.         string sss = "";
  64.         for(int i=0; i<ss.size(); i++){
  65.             if(ss[i] == '-'){
  66.                 if(!i || ss[i-1] == '+' || ss[i-1] == '-' || ss[i-1] == '(') sss += '0';
  67.             }
  68.             sss += ss[i];
  69.         }
  70.         auto v = ConvertToPostfix(sss);
  71.         return calcPostfix(v);
  72.     }
  73. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement