Ayuda con la conversión de notación infija a postfija

Iniciado por GominaTilted, 14 Abril 2019, 19:36 PM

0 Miembros y 1 Visitante están viendo este tema.

GominaTilted

Buenas, tengo un código que supuestamente pasa una expresión aritmética escrita con notación infija a postfija, pero la realidad es que no hace nada, o eso parece:


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.

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;
}

Beginner Web

La verdad que no se

Código (cpp) [Seleccionar]
void postfija(tcad &cadena)
{
int i, j=0;
tpila pila;
tcad expresion_postfija;
init_stack(pila);
for(i=0;i<strlen(cadena);i++){
if(isdigit(cadena[i])){
expresion_postfija[j]=cadena[i];
j++;
}
else{
if(empty_stack(pila)==true)
push_stack(pila,cadena[i]);
else{
if(prioridad(cadena[i],top_stack(pila))==true)
push_stack(pila,cadena[i]);
else{
while(empty_stack(pila)==false && prioridad(cadena[i],top_stack(pila))==false){
expresion_postfija[j]=pop_stack(pila);
j++;
}
push_stack(pila,cadena[i]);
}
}
}
}
while(empty_stack(pila)==false){
expresion_postfija[j]=pop_stack(pila);
j++;
}
expresion_postfija[j]='\0';
cout<<"Expresion postfija: "<<expresion_postfija<<endl;
}



Código (cpp) [Seleccionar]
bool prioridad(char a, char b)
{
int operador1, operador2;
switch(a){
case '^': operador1=2;break;
case '*': case '/': operador1=1;break;
case '+': case '-': operador1=0;break;
}
switch(b){
case '^': operador2=2;break;
case '*': case '/': operador2=1;break;
case '+': case '-': operador2=0;break;
}
return operador1>operador2;
}
7w7