算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。
#include <iostream>
#include<stack>
#include<map>
using namespace std;
const int maxn = 1e4 + 10;
typedef long long ll;
stack<char> s;
int main() {
map<char, int> mp;
string str;
cin >> str;
bool test = true;
mp['-'] = 1, mp['+'] = 1;
mp['*'] = 2, mp['/'] = 2;
mp['('] = 3, mp[')'] = 3;
for (int i = 0; i < str.size(); i++)
{
if (((i == 0 || str[i - 1] == '(') && (str[i] == '+' || str[i] == '-')) || (str[i] >= '0' && str[i] <= '9') || (str[i] == '.'))
{
if (!test) //正常
{
cout << " ";
}
if (str[i] != '+')
{
cout << str[i];
}
while (str[i + 1] == '.' || (str[i + 1] >= '0' && str[i + 1] <= '9'))
{
i++;
cout << str[i];
}
test = false;
}
else {
if (str[i] == ')')
{
while (!s.empty() && s.top() != '(')
{
cout << ' ' << s.top();
s.pop();
}
s.pop();
}
else if (s.empty() || mp[str[i]] > mp[s.top()])
{
s.push(str[i]);
}
else {
while (!s.empty() && s.top() != '(')
{
cout << ' ' << s.top();
s.pop();
}
s.push(str[i]);
}
}
}
while (!s.empty())
{
cout << ' ' << s.top();
s.pop();
}
return 0;
}
网友评论