#include<iostream>
#include<stack>
#include<cstring>
using namespace std;
int priority(char c)
{
if(c=='(')
return 0;
else if(c=='+'||c=='-')
return 1;
else return 2;
}
bool cmp(char a,char b)
{
return priority(a)>priority(b);
}
int main()
{
string a;
stack<char>st;
cin>>a;
for(int i=0;i<a.length();i++)
{
if(a[i]>='0'&&a[i]<='9') //如果是数字的话就直接输出
{
if(a[i+1]>='0'&&a[i+1]<='9') //如果数字不是一位数就不加空格
{
cout<<a[i];
continue;
}
else { //加空格
cout<<a[i]<<" ";
continue;
}
}
if(a[i]=='(')
st.push(a[i]);
else if(a[i]==')') //遇到括号就输出括号包起来的
{
while(!st.empty()&&st.top()!='(')
{
cout<<st.top()<<" ";
st.pop();
}
st.pop(); //将左括号删除
}else {
while(!st.empty()&&!cmp(a[i],st.top())) //如果a[i]的值小于或等于栈顶元素 就出栈 结束后a[i]入栈
{
cout<<st.top()<<" ";
st.pop();
}
st.push(a[i]);
}
}
while(!st.empty())
{
cout<<st.top()<<" ";
st.pop();
}
}
中缀表达式转后缀表达式(栈)
最新推荐文章于 2023-10-17 14:24:22 发布
本文介绍了一个C++程序,用于实现中缀表达式到后缀表达式的转换,并进行计算。程序利用栈数据结构,遵循运算符优先级规则,能够正确处理括号和各类运算符,对于输入的数学表达式,能输出等价的后缀表达式并计算结果。
摘要由CSDN通过智能技术生成