数据结构与算法分析——c语言描述 练习3.20 c 答案
很惭愧的说,这道题我写了好久,断断续续写了一个星期。。。。智商捉急。。。
思路是这样的,后缀表达式不用管计算顺序,但是有一点是在必要的时候添加括号,我是建了一个结构,包含一个表达式和这个表达式最外层的运算符。结合的时候注意比较优先级进而添加括号。
#include<stack>
#include<iostream>
#include<string>
using namespace std;
struct OneExpr {
string expr;
char oper = ' ';
};
int operatorPriority(char c) {//运算符优先级比较
if (c == '^')
return 3;
else if (c == '*' || c == '/')
return 2;
else if (c == '+' || c == '-')
return 1;
}
int operatorCmp(char c1, char c2) {
int t1, t2;
t1 = operatorPriority(c1);
t2 = operatorPriority(c2);
return t1 - t2;
}
stack<OneExpr> infixExpr;
int main() {
string postfix;//逆序表达式
getline(cin, postfix);
string num;
for (int i = 0; i < postfix.length(); i+