int cmp(int a,int b,char c){
if(c=='+') return a+b;
if(c=='-') return a-b;
if(c=='*') return a*b;
return a/b;
}
int evalRPN(char** tokens, int tokensSize) {
int index=0;
int* stack=(int*)malloc(sizeof(int)*tokensSize);
int top=0;
while(index<tokensSize){
if(tokens[index][0]=='+'||tokens[index][0]=='/'||tokens[index][0]=='*'||(tokens[index][0]=='-'&&tokens[index][1]==0)){
int b=stack[--top];
int a=stack[--top];
stack[top++]=cmp(a,b,tokens[index][0]);
}else{
stack[top++]=atoi(tokens[index]);
}
index++;
}
return stack[0];
}
要注意负号和-的区别。
结果: