表达式计算

表达式计算
例如:
2 - 3 * 4 + 5 这个表达式
下面是按照后缀表达式来写的程序,即表达式在栈中存放的顺序是2,3,4,’-‘,’*’,5’+’ 的顺序存放,碰到数值就压入栈中,当碰到运算符时候,先存入栈,当下一个运算符压入栈时比较两个运算符的优先级,如果两个运算符优先级相同,就继续入栈,知道所有的数值和运算符都入栈然后再按顺序使用top()来取栈顶,取两个值,和一个运算符就计算再压入栈再重复前面的动作,知道栈内所有的元素都出栈;如果新的运算符优先级没有已经入栈的前一个运算符优先级高,就top()
栈顶,先计算前一个的运算符,再把结果入栈,继续前面的重复工作。
可以看出,出栈的条件就是新进的运算符的优先级低于已经入栈的上一个运算符,意味着只要你后面的级别低于我,我就先把我能算的算完,把我算后的结果给你们后辈拿去运算。
这里写图片描述

enum Cal_Type //枚举
{
    OP_NUM,
    OP_SYMBOL,

    OP_ADD,
    OP_SUB,
    OP_MUL,
    OP_DIV,
};

struct Cell
{
    Cal_Type _type; // 类型 
    int _value; // 值 
    Cell(Cal_Type type, int value)
        :_type(type)
        ,_value(value)
    {}
};

class Calculator
{

public:
    Calculator(const vector<Cell>&exp)
        :_exp(exp)
    {}

int PostCalCount()//后缀算法
    {
        stack<int>s;

        for (size_t i = 0; i < _exp.size(); ++i)
        {
            if (_exp[i]._type == OP_NUM)
            {
                s.push(_exp[i]._value);
            }
            else
            {
                int right = s.top();
                s.pop();
                int left = s.top();
                s.pop();

                switch (_exp[i]._value)
                {
                case OP_ADD:
                    s.push(left + right);
                    break;
                case OP_SUB:
                    s.push(left - right);
                    break;
                case OP_MUL:
                    s.push(left * right);
                    break;
                case OP_DIV:
                    s.push(left / right);
                    break;
                default:
                    break;
                }
            }
        }
        return s.top();
    }
HTML 是一种用于创建网页的标记语言,它本身不支持表达式计算。但是,我们可以使用 JavaScript 来实现在 HTML 页面中进行表达式计算。JavaScript 是一种脚本语言,可以嵌入到 HTML 中,在浏览器端运行。 通过在 HTML 页面中嵌入 JavaScript 代码,我们可以实现简单的表达式计算。比如,我们可以在 HTML 页面中添加一个输入框和一个按钮,当用户输入一个表达式并点击按钮时,JavaScript 代码可以解析这个表达式计算出结果,最后将结果显示在页面上。 下面是一个简单的 HTML 页面示例,其中包含一个输入框和一个按钮,点击按钮时会计算输入框中的表达式并显示结果: ```html <!DOCTYPE html> <html> <head> <title>表达式计算</title> <script> function calculate() { // 获取输入框中的表达式 var expr = document.getElementById("expr").value; // 使用 eval 函数计算表达式 var result = eval(expr); // 将结果显示在页面上 document.getElementById("result").innerHTML = result; } </script> </head> <body> <h1>表达式计算</h1> <input type="text" id="expr" /> <button onclick="calculate()">计算</button> <div id="result"></div> </body> </html> ``` 请注意,eval 函数可以将字符串解析为 JavaScript 代码并执行。因此,在使用 eval 函数时应该非常小心,避免安全问题。同时,在实际开发中,我们也应该使用更加严谨和安全的方法来进行表达式计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值