Código:
void Expresion :: ConvertirEnPostfija ()
{
Pila p;
string chara, aux;
for (unsigned int i = 0; i < infija.size(); i++)
{
chara = infija[i];
if (chara == "(")
{
p.Apilar(chara);
}
else
if (chara == ")")
{
p.CimaPila(aux);
while (!(p.PilaVacia() && aux == "("))
{
p.Desapilar();
postfija.push_back(aux);
p.CimaPila(aux);
}
if (aux == "(")
p.Desapilar();
else
cerr << "ERROR";
}
else
if (chara == "+" || chara == "-" || chara == "*" || chara == "/" || chara == ")")
{
p.CimaPila(aux);
while (!p.PilaVacia() && !(chara == "(" && aux >= chara))
{
p.Desapilar();
postfija.push_back(aux);
p.CimaPila(aux);
}
p.Apilar(chara);
}
else
postfija.push_back(chara);
while (!p.PilaVacia())
{
p.CimaPila(aux);
p.Desapilar();
postfija.push_back(aux);
}
}
return;
}
También necesito ayuda para que deje introducir la expresión con espacios en blanco, ya que usando "cin" salta al último caso del switch en el main, pero el getline me da error.
Código:
switch (opcion)
{
case 1:
cin >> aritmetica;
exp.PonerExpresion(aritmetica);
break;
/*Mas opciones que no vienen al caso*/
case 0:
cout << "fin del programa." // salta directamente aquí
break;
default:
cout << "Opcion no valida" << endl;
}