c语言实现eval函数
时间: 2024-01-02 08:19:48 浏览: 103
C语言实现eval函数可以通过解析后缀表达式来实现。具体步骤如下:
1. 将中缀表达式转换为后缀表达式。
2. 用栈来计算后缀表达式。
3. 将计算结果返回。
具体实现可以参考以下代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_STACK_SIZE 100
typedef struct {
double data[MAX_STACK_SIZE];
int top;
} Stack;
void initStack(Stack *s) {
s->top = -1;
}
int isEmpty(Stack *s) {
return s->top == -1;
}
int isFull(Stack *s) {
return s->top == MAX_STACK_SIZE - 1;
}
void push(Stack *s, double value) {
if (isFull(s)) {
printf("Stack is full.\n");
exit(1);
}
s->data[++s->top] = value;
}
double pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty.\n");
exit(1);
}
return s->data[s->top--];
}
double eval(char *str) {
Stack s;
double op1, op2, result;
char *p = str;
initStack(&s);
while (*p) {
if (isdigit(*p)) {
push(&s, atof(p));
while (isdigit(*p) || *p == '.') {
p++;
}
} else if (*p == '+' || *p == '-' || *p == '*' || *p == '/') {
op2 = pop(&s);
op1 = pop(&s);
switch (*p) {
case '+':
result = op1 + op2;
break;
case '-':
result = op1 - op2;
break;
case '*':
result = op1 * op2;
break;
case '/':
result = op1 / op2;
break;
}
push(&s, result);
p++;
} else {
p++;
}
}
return pop(&s);
}
```
相关问题:
1. eval函数的实现原理是什么?
2. eval函数有哪些应用场景?
3. 如何在C语言中实现中缀表达式转后缀表达式?