虽然打个简单计算器不算难事,但是模拟始终算一关,不能忽视基础。
本程序不适用以下情况:
表达式中带空格
表达式中带括号
仅能进行四则运算,结果限制在int型
#include<bits/stdc++.h>
using namespace std;
int level(char x){
if(x == '+' || x == '-')
return 1;
else
return 2;
}
int calculate(string s){
stack<char>q1;//压符号
char q2[10010];//存储后缀表达式
stack<int>q3;//压数字
int cnt = 0;
string s1;
int cnt1 = 0;
/*for(int i = 0;i < s.size();i++)
if(s[i] != ' ')
s1[cnt++] = s[i];*/
for(int i = 0;i < s.size();i++){
if(s[i] == ' ')
continue;
if(s[i] >= '0' && s[i] <= '9'){
q2[cnt++] = s[i];
continue;
}
if(q1.empty())
q1.push(s[i]);
else{
while(!q1.empty()){
if(level(s[i]) <= level(q1.top())){
q2[cnt++] = q1.top();
q1.pop();
if(q1.empty()){
q1.push(s[i]);
break;
}
}
else{
q1.push(s[i]);
break;
}
}
}
}
while(!q1.empty()){
q2[cnt++] = q1.top();
q1.pop();
}
for(int i = 0;i < cnt + 1;i++)
cout<<q2[i];
cout<<endl;
for(int i = 0;i < cnt;i++){
if(q2[i] >= '0' && q2[i] <= '9')
q3.push(q2[i] - '0');
else{
int t1, t2;
t1 = q3.top();
q3.pop();
t2 = q3.top();
q3.pop();
switch(q2[i]){
case '+':q3.push(t1 + t2);break;
case '-':q3.push(t2 - t1);break;
case '*':q3.push(t1 * t2);break;
case '/':q3.push(t2 / t1);break;
}
}
}
return q3.top();
}
int main(){
string s;
cin>>s;
cout<<calculate(s);
system("pause");
return 0;
}