Я пишу программу, которая принимает пользовательский ввод и использует стеки для преобразования инфиксного выражения в постфиксное выражение на основе приоритета, причем операнды всегда идут перед операторами.Например, если пользователь вводит:
(a + b * c)
, тогда программа должна отобразить:
abc * +
до сих пор, У меня есть это:
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main()
{
stack<char> s;
char input;
while (cin.get(input) && input != '\n')
{
if (isalnum(input))
cout << input << "\n";
else if (input == '(')
s.push(input);
else if (input == ')')
{
while (!s.empty() && s.top() != '(')
{
cout << s.top();
s.pop();
}
if(!s.empty())
s.pop();
else
cout << "ERROR: No Matching ( \n";
}
else if (s.empty() && input == '*'||'/'||'+'||'-' && s.top() < input) // Error Begins Here?
{
char a = '*';
char b = '/';
char c = '+';
char d = '-';
bool prec (char a, char b, char c, char d);
return ('*' > '/' > '+' > '-');
s.push(input);
}
else if (input == '*'||'/'||'+'||'-' && s.top() >= input)
while (!s.empty())
{
cout << s.top();
s.pop();
s.push(input);
}
}
while (!s.empty())
{
cout << s.top();
s.pop();
}
}
, который компилируется и работает, но не функционирует, как следует.Когда вводится выражение типа «ab», программа будет отображать «ab», как и должно, но если я введу «a + b + c», то будет отображаться только «a».Это означает, что программа не помещает операторы в стек, который будет отображаться позже.Мне нужна помощь, чтобы изменить программу так, чтобы при вводе оператора он добавлялся в стек и затем отображался в зависимости от его приоритета (*> /> +> -) после операндов, когда ввод выполнен.
Я довольно новичок в C ++ и программировании в целом, поэтому любые предложения будут хороши.