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

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

  1. int priority(char operator) {
  2. if (operator == '*' || operator == '/')
  3. return 2;
  4. else if (operator == '+' || operator == '-')
  5. return 1;
  6. else
  7. return 0; // 括号或其他非法字符
  8. }
  9. // ...
  10. void evaluateExpression(Stack *operandStack, Stack *operatorStack) {
  11. char op = pop(operatorStack);
  12. int b = pop(operandStack);
  13. int a = pop(operandStack);
  14. int result = calculate(a, op, b);
  15. push(operandStack, result);
  16. }
  17. int evaluate(char *expression) {
  18. Stack operandStack; // 操作数栈
  19. Stack operatorStack; // 运算符栈
  20. initStack(&operandStack);
  21. initStack(&operatorStack);
  22. int i = 0;
  23. while (expression[i] != '\0') {
  24. // ...
  25. } else if (expression[i] == '+' || expression[i] == '-' || expression[i] == '*' || expression[i] == '/') { // 处理运算符
  26. while (!isEmpty(&operatorStack) && peek(&operatorStack) != '(' && priority(expression[i]) <= priority(peek(&operatorStack))) {
  27. evaluateExpression(&operandStack, &operatorStack);
  28. }
  29. push(&operatorStack, expression[i]);
  30. i++;
  31. // ...
  32. } else if (expression[i] == ')') { // 处理右括号
  33. while (!isEmpty(&operatorStack) && peek(&operatorStack) != '(') {
  34. evaluateExpression(&operandStack, &operatorStack);
  35. }
  36. // ...
  37. }
  38. // ...
  39. }
  40. // ...
  41. }

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?