仿LISP运算 | c++
1 #include<bits/stdc++.h> 2 using namespace std; 3 /** 4 * 仿LISP运算 5 * 模拟(sub (mul 2 4) (div 9 3)) 6 * @return 7 */ 8 9 int main() { 10 int mark = 0; 11 int num1,num2; 12 string str; 13 stack<int> numStatck; 14 stack<string> operStack; 15 16 getline(cin,str); 17 for(int i = 0; i < str.length() ; i++) 18 { 19 char c = str[i]; 20 cout<<c<<" "; 21 if(c == '(') { 22 operStack.push(str.substr(i+1,3)); 23 i += 4; 24 mark = i + 1; 25 } else if(c == ')') { 26 if(mark < i) { 27 //stoi string --> int 28 numStatck.push(stoi(str.substr(mark,i-mark))); 29 30 i++; 31 mark = i + 1; 32 } 33 num1 = numStatck.top(); 34 numStatck.pop(); 35 num2 = numStatck.top(); 36 numStatck.pop(); 37 string ex = operStack.top(); 38 operStack.pop(); 39 40 if(ex == "add") 41 numStatck.push(num1+num2); 42 else if(ex == "sub") 43 numStatck.push(num1-num2); 44 else if (ex == "mul") 45 numStatck.push(num1*num2); 46 else if( ex == "div") 47 if(num2 == 0) cout <<"ERROR"<<endl; 48 else 49 numStatck.push(num2/num1); 50 51 } else { 52 if(c == ' ') { 53 if(mark < i ) { 54 numStatck.push(stoi(str.substr(mark,i-mark))); 55 mark = i + 1; 56 } 57 } 58 } 59 } 60 cout<<"结果:"; 61 cout<<numStatck.top()<<endl; 62 return 0; 63 }