c语言使用栈实现简单计算器
时间: 2023-10-11 19:08:47 浏览: 199
下面是使用栈实现简单计算器的 C 语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
// 定义栈结构体
typedef struct stack {
int top;
int capacity;
int *array;
} Stack;
// 创建栈
Stack *createStack(int capacity) {
Stack *stack = (Stack *) malloc(sizeof(Stack));
stack->top = -1;
stack->capacity = capacity;
stack->array = (int *) malloc(capacity * sizeof(int));
return stack;
}
// 判断栈是否为空
int isEmpty(Stack *stack) {
return stack->top == -1;
}
// 判断栈是否已满
int isFull(Stack *stack) {
return stack->top == stack->capacity - 1;
}
// 入栈
void push(Stack *stack, int item) {
if (isFull(stack)) {
printf("栈已满,无法入栈\n");
return;
}
stack->array[++stack->top] = item;
}
// 出栈
int pop(Stack *stack) {
if (isEmpty(stack)) {
printf("栈为空,无法出栈\n");
return -1;
}
return stack->array[stack->top--];
}
// 获取栈顶元素
int peek(Stack *stack) {
if (isEmpty(stack)) {
printf("栈为空\n");
return -1;
}
return stack->array[stack->top];
}
// 计算两个数字的结果
int calculate(int num1, int num2, char op) {
switch (op) {
case '+':
return num1 + num2;
case '-':
return num1 - num2;
case '*':
return num1 * num2;
case '/':
return num1 / num2;
default:
printf("非法操作符\n");
return 0;
}
}
// 计算表达式的值
int evaluate(char *exp) {
Stack *stack = createStack(strlen(exp));
int i, num = 0;
for (i = 0; exp[i] != '\0'; i++) {
if (isdigit(exp[i])) {
num = num * 10 + (exp[i] - '0');
} else if (exp[i] == '+' || exp[i] == '-' || exp[i] == '*' || exp[i] == '/') {
push(stack, num);
num = 0;
int num1 = pop(stack);
int num2 = pop(stack);
push(stack, calculate(num2, num1, exp[i]));
} else if (exp[i] == ' ') {
continue;
} else {
printf("非法字符\n");
return 0;
}
}
return pop(stack);
}
// 测试代码
int main() {
char exp[100];
printf("请输入表达式:\n");
fgets(exp, 100, stdin);
printf("计算结果为:%d\n", evaluate(exp));
return 0;
}
```
这个简单计算器实现了四则运算,支持多位数字和空格,但不支持负数和括号。可以通过输入表达式来计算表达式的值。
阅读全文