题意:给出一个表达式,包含运算符+,-,*,min,max,求其结果
思路:用两个栈,一个操作数栈,一个操作符栈,当处理+,-,*操作符时,如果处理的操作符优先级比栈顶操作符优先级低,就入栈,否则,出栈;在处理min,max操作符时,如果当前处理的为min或者max,将min或者max,(两个入栈,当处理逗号时,就出栈,直到栈顶操作符为左括号,并将逗号入栈;而当处理右括号时,出栈直到栈顶为逗号。当处理完毕后,操作符栈可能不为空,需要出栈处理
代码如下:
#include
#include
#include
#include
验证代码如下:
1 * 2 + max(3,4)
min(2+3, max(4, 5))
int main()
{
#ifndef ONLINE_JUDGE
ifstream fin("f:\\oj\\uva_in.txt");
streambuf *old = cin.rdbuf(fin.rdbuf());
#endif
Solution solver;
char s[MAX_LEN];
while (cin.getline(s, MAX_LEN))
{
cout << "s:" << s << endl;
int ans = solver.Calculate(s);
cout << "ans:" << ans << endl;
}
#ifndef ONLINE_JUDGE
cin.rdbuf(old);
#endif
return 0;
}