es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener el valor de una expresión postfix de un número de más de un dígito.

#include
#include
#include
using namespace std;
float postix_evaluate(string expr)
{
stack stk;

for (int x = 0; x < expr.length(); x++)
{
    if (isdigit(expr[x]))
    {
        float num = 0;
        while (isdigit(expr[x]))
        {
            num = num * 10 + (expr[x] - '0');
            x++;
        }
        x--;
        stk.push(num);
    }
    else
    {
        float val;
        float op2 = stk.top();
        stk.pop();
        float op1 = stk.top();
        stk.top();
        switch (expr[x])
        {
        case '+':
            val = op1 + op2;
            break;
        case '-':
            val = op1 - op2;
            break;
        case '*':
            val = op1 * op2;
            break;
        case '/':
            val = op1 / op2;
            break;
        }
        stk.push(val);
    }
}
return stk.top();

}
int main()
{
string line;
cout << “Ingrese la expresion” << endl;
cin >> line;
cout << “El valor de la expresion es: ” << postix_evaluate(line) << endl;
return 0;
}

Cuando ingreso la expresión “213+” obtengo el resultado “4”; pero espero obtener 24 (21+3).

¿Qué debo hacer para tomar operandos con más de un dígito?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Puede modificar el código para tomar operandos con más de un dígito al recorrer la cadena de expresión y verificar si hay varios dígitos. Si se encuentran varios dígitos, puede convertirlos en un número único y ponerlos en la pila. Por ejemplo:

    for (int x = 0; x < expr.length(); x++)
    {
        if (isdigit(expr[x]))
        {
            int num = 0;
            while (isdigit(expr[x]))
            {
                num = num * 10 + (expr[x] - '0');
                x++;
            }
            stk.push(num);
        }
        else
        {
            // ...
        }
    }
    

Comments are closed.