本博客采用STL中的栈实现,各位小伙伴在明白原理后可尝试采用自己书写的栈实现。
理论原理:
代码实现:
#include <iostream>
#include <string>
#include <stack>
using namespace std;
double calculate(char c,double leftNum,double rightNum)
{
switch (c)
{
case '+':
return leftNum+rightNum;
case '-':
return leftNum-rightNum;
case '*':
return leftNum*rightNum;
case '/':
return leftNum/rightNum;
default:
return 0;
}
}
int main()
{
stack<double> stack;
string s="831-5*+";
for(int i=0;i<s.size();i++)
{
//如果是数字直接进栈
if(s[i] >= '0' && s[i] <='9')
{
stack.push(s[i]-'0');
}
//如果是运算符,第一个出栈的为右操作数,第二个出栈的为左操作数
//因为右操作数后进栈,所以先出栈
else
{
double rightNum=stack.top();
stack.pop();
double leftNum=stack.top();
stack.pop();
//计算完成后将结果入栈
stack.push(calculate(s[i],leftNum,rightNum));
}
}
//最后栈中只剩下一个数,即正确
if(stack.size() == 1)
{
double res=stack.top();
stack.pop();
cout<<res<<endl;
}
else
{
cout<<"result is error"<<endl;
}
return 0;
}
运行结果: