ZBLOG

#include #include #include #define MAX_SIZE 100 // 定义栈结构 typedef struct { int data[MAX_SIZE]; int top; } Stack; void initStack(Stack *s) { s->top = -1; } int isEmpty(Stack *s) { return s->top == -...

你可以在 evaluate 函数中添加判断优先级的功能。可以使用一个优先级比较函数来比较两个运算符的优先级,然后根据优先级来决定是否需要弹出栈中的运算符进行计算。

下面是修改后的代码示例:

int priority(char operator) {
    if (operator == '*' || operator == '/')
        return 2;
    else if (operator == '+' || operator == '-')
        return 1;
    else
        return 0; // 括号或其他非法字符
}

// ...

void evaluateExpression(Stack *operandStack, Stack *operatorStack) {
    char op = pop(operatorStack);
    int b = pop(operandStack);
    int a = pop(operandStack);
    int result = calculate(a, op, b);
    push(operandStack, result);
}

int evaluate(char *expression) {
    Stack operandStack; // 操作数栈
    Stack operatorStack; // 运算符栈

    initStack(&operandStack);
    initStack(&operatorStack);

    int i = 0;
    
    while (expression[i] != '\0') {
        
        // ...
        
        } else if (expression[i] == '+' || expression[i] == '-' || expression[i] == '*' || expression[i] == '/') { // 处理运算符
            while (!isEmpty(&operatorStack) && peek(&operatorStack) != '(' && priority(expression[i]) <= priority(peek(&operatorStack))) {
                evaluateExpression(&operandStack, &operatorStack);
            }
            push(&operatorStack, expression[i]);
            i++;
            
        // ...
        
       } else if (expression[i] == ')') { // 处理右括号
            while (!isEmpty(&operatorStack) && peek(&operatorStack) != '(') {
                evaluateExpression(&operandStack, &operatorStack);
            }
            // ...
        }
        
        // ...
    }

    // ...

}

这样,程序将会根据运算符的优先级来进行计算。注意,优先级函数 priority 返回一个整数值,其中大于等于2的值表示乘法和除法的优先级较高,返回1表示加法和减法的优先级较低,返回0表示非法字符或括号。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=9217

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?