概述
一开始想的时候,我走了歪路,一直想把一个表达式放进栈,后来看了网上的才知道放运算符也行,就试着做了一下,果然比放表达式简单多
大致思想:
1、遇到字母就入result字符数组
2、根据运算符优先级:*/+-(降序)
我们在遍历数组A过程中,如果此时数组的元素为运算符且在栈不为空的时候,优先级大于栈顶元素,就入栈
优先级小于栈顶元素,就先弹栈,并将弹出的压入result,再将此时遍历到的压入栈
如果遍历数组A时,遇到‘(’ ')' 这两个符号,执行continue
3、根据以上规则,写循环
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
void solve()
{
static vector<char> A { 'a', '+', 'b', '*', 'c' };//abc*+
static vector<char> B;
static stack<char> C;
for (int i = 0; i < A.size(); i++)
{
if (A[i] != '+' && A[i] != '-'
&& A[i] != '*' && A[i] != '/' && A[i] != '(' && A[i] != ')')
{
B.push_back(A[i]);
}
else if (C.empty() && (A[i] - '+'==0 || A[i] - '-'==0 || A[i] - '*'==0 || A[i] - '/'==0))
C.push(A[i]);
else if (!C.empty() && (A[i] - '+' == 0 || A[i] - '-' == 0 || A[i] - '*' == 0 || A[i] - '/' == 0))
{
if (C.top() == '*')
{
C.pop();
B.push_back('*');
C.push(A[i]);
}
else if (C.top() == '/' && (A[i] - '+'==0 || A[i] - '-'==0))
{
C.pop();
B.push_back('/');
C.push(A[i]);
}
else if (C.top() == '/' && A[i]
== '*' )
{
C.push(A[i]);
}
else if (C.top() - '+'==0 && A[i] - '-'==0)
{
C.pop();
B.push_back('+');
C.push(A[i]);
}
else if (C.top() - '+' == 0 && (A[i] == '*' || A[i] == '/' ))
{
C.push(A[i]);
}
else if (C.top() - '-'==0)
{
C.pop();
B.push_back('-');
C.push(A[i]);
}
else if (A[i] - '('==0 || A[i] - ')'==0)
{
continue;
}
else
{
continue;
}
}
}
for (int i = 0; i < B.size(); i++)
cout << B[i] << "
";
while(!C.empty())
{
cout << C.top() << "
";
C.pop();
}
}
int main()
{
solve();
system("pause");
return 0;
}
最后
以上就是文静往事为你收集整理的c++ 算术表达式转后缀表达式的全部内容,希望文章能够帮你解决c++ 算术表达式转后缀表达式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复