用c++写一个利用数据结构中的运算符优先算法实现整数的加、减、乘、除、括号的多项式运算,运算表达式以#结尾。测试表达式如下运算: "1+(1+2)*(5+25/5)#"
时间: 2023-02-06 13:19:38 浏览: 146
字符串的形式给出。
下面是一个使用运算符优先算法来实现整数多项式运算的 C 程序的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_EXPR_LEN 100
typedef struct {
int top;
int data[MAX_EXPR_LEN];
} Stack;
// 初始化栈
void stack_init(Stack *stack) {
stack->top = -1;
}
// 判断栈是否为空
int stack_empty(Stack *stack) {
return stack->top == -1;
}
// 入栈
void stack_push(Stack *stack, int val) {
stack->data[++stack->top] = val;
}
// 出栈
int stack_pop(Stack *stack) {
return stack->data[stack->top--];
}
// 返回栈顶元素
int stack_top(Stack *stack) {
return stack->data[stack->top];
}
// 返回运算符优先级
int get_priority(char op) {
switch (op) {
case '(': return 0;
case '+':
case '-': return 1;
case '*':
case '/': return 2;
default: return -1;
}
}
// 判断是否为运算符
int is_operator(char c) {
return c == '+' || c == '-' || c == '*' || c == '/';
}
// 计算两个数的结果
int calc(int a, int b, char op) {
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
default: return 0;
}
}
// 计算表达式的值
int eval(const char *expr) {
Stack op_stack, val_stack;
stack_init(&op_stack);
stack_init(&val_stack);
int len = strlen(expr);
for (int i = 0; i < len; i++) {
char c = expr[i];
if (isdigit(c)) {
// 处理数字
int val = 0;
while (i < len && isdigit(expr[i])) {
val = val * 10 + expr[i] - '0';
i++;
}
阅读全文