想要的是这个结果
但是却卡在了这
这是我的代码
#include<stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#define MAXSIZE 100
#define OPSIZE 7
#define ERROR 0
#define OK 1
#define OVERFLOW -2
typedef int SElemType;
typedef char OperandType;
typedef int Status;
unsigned char Prior[7][7] = {
'>','>','<','<','<','>','>',
'>','>','<','<','<','>','>',
'>','>','>','>','<','>','>',
'>','>','>','>','<','>','>',
'<','<','<','<','<','=',' ',
'>','>','>','>',' ','>','>',
'<','<','<','<','<',' ','='
};//优先关系
char OP[OPSIZE] = { '+','-','*','/','(',')','#' };//运算符集合
typedef struct {
int* base;//栈底指针
int* top;//栈顶指针
int stacksize;//栈最大容量
}SqStack;
Status InitStack(SqStack& S) {//初始化
S.base = new SElemType[MAXSIZE];//分配最大容量为MAXSIZE的数组空间
if (!S.base)
exit(OVERFLOW);//存储空间分配失败
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
Status Push(SqStack& S, SElemType e) {//入栈
if (S.top - S.base == S.stacksize)
return ERROR;//栈满
*(S.top)++ = e;//元素e压入栈顶,栈顶指针加一
return OK;
}
Status Pop(SqStack& S, SElemType& e) {//出栈
if (S.top == S.base)
return ERROR;//栈空
e = *--S.top;//栈顶指针减一,将栈顶元素赋给e
return OK;
}
SElemType GetTop(SqStack& S) {//返回S的栈顶元素
if (S.top != S.base)//栈非空
return *(S.top - 1);
}
Status In(char op, char Op[]) {//判断读入字符ch是否为运算符
for (int i = 0; i < OPSIZE; i++) {
if (op == Op[i])
return OK;
else
return ERROR;
}
}
int FindOp(char op, char Op[]) {//字符在优先关系表中的位置
int x;
for (int i = 0; i < OPSIZE; i++)
if (op == Op[i])
x = i;
return x;
}
char Precede(char op1, char op2) {//判断运算符栈的栈顶元素与读入运算符之间的优先级关系的函数
return Prior[FindOp(op1, OP)][FindOp(op2, OP)];
}
int Operate(int a, int theta, int b) {//进行二元运算函数
switch (theta)
{
case '+':
return a + b;
break;
case '-':
return a - b;
break;
case '*':
return a * b;
break;
case'/':
return a / b;
break;
default:
return ERROR;
}
}
OperandType EvaluateExpression()
{//后缀表达式
int ch;
int x, a, b, theta;
SqStack OPTR, OPND;//操作符栈、操作数栈
InitStack(OPND);
InitStack(OPTR);
Push(OPTR, '#');
ch = getchar();
while (ch != '#' || GetTop(OPTR) != '#')
{
if (!In(ch, OP))//不是运算符则进入OPND栈
{
Push(OPND, ch - 48);
ch = getchar();
}
else
switch (Precede(GetTop(OPTR), ch))
{
case '<':
Push(OPTR, ch);
ch = getchar();
break;
case '>':
Pop(OPTR, theta);
Pop(OPND, b);
Pop(OPTR, a);
Push(OPND, Operate(a, theta, b));
break;
case '=':
Pop(OPTR, x);
ch = getchar();
break;
}
}
return GetTop(OPND);
}
void main()
{
printf("要求以字符序列的形式从终端输入语法正确,不含变量的整数表达式(以#结束):\n");
int e = EvaluateExpression();
printf("%d\n", e);
}