Aqui te dejo mi versión de ese problema
* Utilizo la Clase Pila.h
* No cuento con precedencia de parentesis.
Te puede servir para cojer alguna idea...
Código C++:
Ver original#include <iostream>
#include "Pila.h"
using namespace std;
int ChanStrinInt(string text);
int Calcula(string operador,int axul, int axu2);
int main()
{
Pila calculadora;
string infija , operador = "" , posfijo = "" , auxiliar = "";
int pos = 0, tamano , axul , axu2;
//lee por teclado el numero en infija.
getline(cin,infija);
tamano = infija.length();
for(int i = 0; i < tamano;i++)
{
if((infija[i] - '0') >= 0)
{
posfijo += infija[i];
}
else
{
posfijo += " " + operador ;
if(operador != "")
posfijo += " ";
operador = "";
operador = infija[i];
}
}
posfijo +=" "+operador + " ";
// ya esta el string pasado en posfijo.
cout<<posfijo<<endl;
while((pos = posfijo.find(" ")) != -1)
{
if(pos > 1)
calculadora.Apilar(ChanStrinInt(posfijo.substr(0,pos)));
else if((posfijo[0] - '0') >= 0)
calculadora.Apilar(ChanStrinInt(posfijo.substr(0,pos)));
else
{
calculadora.CimaPila(axul);
calculadora.Desapilar();
calculadora.CimaPila(axu2);
calculadora.Desapilar();
calculadora.Apilar(Calcula(posfijo.substr(0,pos),axul,axu2));
}
posfijo = posfijo.substr(pos+1,posfijo.length()-pos);
}
calculadora.CimaPila(axu2);
cout<<axu2;
system("PAUSE"); //PAUSA EL SISTEMA return 0; // para la aplicación tambien puedo usar exit.
}
int Calcula(string operador,int axul, int axu2)
{
int result;
switch(char(operador[0]))
{
case '*' :
result = axul * axu2 ;
break;
case '/' :
result = axul / axu2 ;
break;
case '-' :
result = axul - axu2 ;
break;
case '+' :
result = axul + axu2 ;
break;
}
return result;
}
int ChanStrinInt(string text)
{
int numero = 0;
for(int i = 0; i < text.length(); i++)
numero = numero * 10 + (text[i] - '0');
return numero ;
}
Saludos...