你可以修改代码如下:
#include<iostream>
using namespace std;
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef struct {
char *base;
char *top;
int stacksize;
} SqStack;
Status InitStack(SqStack &S) { //初始化栈
S.base = new char[MAXSIZE];
if (!S.base) exit(OVERFLOW);
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
Status Push(SqStack &S, char e) { //入栈
if (S.top - S.base == MAXSIZE)
return ERROR;
*S.top++ = e;
return OK;
}
Status Pop(SqStack &S) { //出栈
if (S.top == S.base) return ERROR;
S.top--;
return OK;
}
char GetTop(SqStack S) { //取栈顶元素
if (S.top == S.base) return ERROR;
return *(S.top - 1);
}
char Precede(char a, char b) { //比较运算符a和b的优先级
if ((a == '(' && b == ')') || (a == '=' && b == '=')) {
return '=';
}
else if (a == '(' || a == '=' || b == '(' || (a == '+' || a == '-') && (b == '*' || b == '/')) {
return '<';
}
else {
return '>';
}
}
void InfixToSuffix(char s[]) { //将中缀表达式转化为后缀表达式并输出
SqStack OPTR; //操作符栈
InitStack(OPTR); //初始化操作符栈
int i = 0;
int j = 0;
char t[100];
while (s[i] != '\0') {
if (isdigit(s[i])) {
t[j++] = s[i++];
}
else {
char e;
switch (Precede(GetTop(OPTR), s[i])) {
case '<':
Push(OPTR, s[i++]);
break;
case '=':
Pop(OPTR);
i++;
break;
case '>':
e = GetTop(OPTR);
Pop(OPTR);
t[j++] = e;
}
}
}
while (OPTR.top != OPTR.base) {
char e;
Pop(OPTR);
t[j++] = e;
}
t[j] = '\0';
cout << "后缀表达式为:" << t << endl; //输出后缀表达式
}
int main() {
char infixExpression[MAXSIZE];
cout << "请输入中缀表达式:";
cin >> infixExpression;
InfixToSuffix(infixExpression);
return 0;
}
这样,你就可以将中缀表达式转化为后缀表达式并输出了。注意在 Pop 函数中需要将栈顶元素赋值给 e,然后再进行出栈操作。
内容由零声教学AI助手提供,问题来源于学员提问




