和简单计算器一模一样直接搬过来用了
#include<iostream>
#include<cstdio>
#include<stack>
#include<map>
#include<string>
using namespace std;
map<char, int> priority =
{
{'+',1},{'-',1},
{'*',2},{'/',2}
};
float getnum(int &index, string str) { //将字符串化为整数
float res = 0;
while (str[index] >= '0' && str[index] <= '9') {
res = res * 10 + str[index++] - '0';
}
return res;
}
float res(float a, float b, char c) {
if (c == '+')
return a + b;
else if (c == '-')
return a - b;
else if (c == '*')
return a * b;
else
return a / b;
}
int main()
{
string str;
while (getline(cin , str))
{
stack<float> num;
stack<char> oper; //分别标识数字栈和符号栈
for (int i = 0; i < str.size(); i++)
{
if (str[i] >= '0' && str[i] <= '9')
{
num.push(getnum(i, str));
}
if (str[i] == '+' || str[i] == '-'||str[i] == '*'||str[i] == '/')
{
if (!oper.empty())
{
if(priority[oper.top()] >= priority[str[i]])
{
while(priority[oper.top()] >= priority[str[i]] ) { //将优先级高的全部弹出
char c = oper.top(); oper.pop(); //弹出符号
float b = num.top(); num.pop(); //弹出数字a
float a = num.top(); num.pop(); //弹出数字b
num.push(res(a, b, c));
if (oper.empty()) break;
}
oper.push(str[i]);
}
else oper.push(str[i]);
}
else oper.push(str[i]);
}
}
while (!oper.empty())
{
char c = oper.top(); oper.pop(); //弹出符号
float b = num.top(); num.pop(); //弹出数字a
float a = num.top(); num.pop(); //弹出数字b
num.push(res(a, b, c));
}
printf("%.0f\n", num.top());
}
}