计算器特性: 支持整型运算(±*/%),能够处理运算符和操作数间的空格,支持括号
实现思路:
利用一个操作数堆栈dgt和一个运算符堆栈ops实现;
1、从左至右扫描运算表达式输入,若为操作数则直接压入dgt堆栈
2、若为运算符则判断ops中是否已经存在运算符,不存在则直接压入,存在则与栈顶运算符比较优先级,优先级高则直接压入,否则就持续pop(每次pop就是取出dgt最顶上两个数和ops栈顶的运算符作一次运算后将结果重新压回dgt),直到找到一个优先级比当前运算符c低的或者堆栈空了。
3、最后到句末\n时再把之前没有pop的运算全部pop掉,最终表达式的结果就是dgt[0]的值
#include<stdio.h>
char ops[100];
int o_top = -1;
int dgt[100];
int d_top = -1;
void pop() {
switch (ops[o_top]) {
case '-': dgt[d_top - 1] -= dgt[d_top]; d_top--; o_top--; break;
case '+': dgt[d_top - 1] += dgt[d_top]; d_top--; o_top--