利用栈,解决逆波兰表达式
//逆波兰表达式
bool IsOperator(const char* token)
{
return ((token[0] == '+') || (token[0] == '-')|| (token[0]=='*')||(token[0]=='/'));
}
int ReversePolishNotation(const char* str[],int size)
{
stack<int> s;
int a,b;
const char* token;
for (int i = 0; i<size; i++) {
token = str[i];
if (!IsOperator(token)) {
s.push(atoi(token)); //int atoi(const char *nptr);将字符转化为整型
}
else
{
b = s.top();
s.pop();
a = s.top();
s.pop();
if (token[0]=='+') {
s.push(a+b);
}
else if(token[0]=='-'){
s.push(a-b);
}
else if (token[0]=='*'){
s.push(a*b);
}
else
s.push(a/b);
}
}
return s.top();
}
int main()
{
const char* str[]={"2","1","+","3","*"};
int value = ReversePolishNotation(str,sizeof(str)/sizeof(const char*));
cout<<value<<endl;
return 0;
}