下面展示一些 内联代码片
。
参考源码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
// 定义操作符的优先级
int precedence(char op) {
if (op == '+' || op == '-') {
return 1;
} else if (op == '*' || op == '/') {
return 2;
} else {
return 0;
}
}
// 执行运算
float executeOperation(float a, float b, char op) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
default:
return 0;
}
}
// 解析和计算表达式
float evaluateExpression(const char *expression) {
int len = strlen(expression);
float operands[len]; // 操作数栈
char operators[len]; // 操作符栈
int operand_top = -1; // 操作数栈顶
int operator_top = -1; // 操作符栈顶
float number = 0;
for (int i = 0; i < len; i++) {
if (isdigit(expression[i])) { // 如果是数字
number = 0;
while (i < len && isdigit(expression[i])) { // 读取多位数字
number = number * 10 + (expression[i] - '0');
i++;
}
operands[++operand_top] = number; // 将数字压入操作数栈
i--;
printf("推入操作数栈:%.2f\n", number);
} else if (expression[i] == '(') { // 如果是左括号
operators[++operator_top] = expression[i]; // 将左括号压入操作符栈
printf("推入操作符栈:%c\n", expression[i]);
} else if (expression[i] == ')') { // 如果是右括号
while (operator_top != -1 && operators[operator_top] != '(') { // 循环计算直到遇到左括号
float b = operands[operand_top--];
float a = operands[operand_top--];
char op = operators[operator_top--];
operands[++operand_top] = executeOperation(a, b, op); // 弹出操作数和操作符进行计算