
做题思路:用栈解决
//这里一定要注意判断整个字符串,因为如果单独判断第一个字符会发现有些负数的第一个字符也是'-'。无法确定字符串是一个符号还是数字
int isSign(char* token) {
return strcmp(token, "+") == 0 || strcmp(token, "/") == 0 || strcmp(token, "-") == 0 || strcmp(token, "*") == 0;
}
int convertToNum(char* string) {
//符号位,0为正,1为负
int sign = 0;
int num = 0;
if(*string == '-' || *string == '+') {
if(*string == '-')
sign = 1;
string++;
}
while(*string != '\\0') {
int digit = *string - '0';
num = num * 10 + digit;
string++;
}
if(sign)
num = -num;
return num;
}
int evalRPN(char ** tokens, int tokensSize){
int stack[5000];
int stack_top = 0;
int i;
for(i = 0; i < tokensSize; i++) {
//如果是符号,弹出栈顶两个元素
if(isSign(tokens[i])) {
int num1 = stack[--stack_top];
int num2 = stack[--stack_top];
int num3;
switch(*(tokens[i])) {
case '+':
num3 = num2 + num1;
break;
case '-':
num3 = num2 - num1;
break;
case '*':
num3 = num2 * num1;
break;
case '/':
num3 = num2 / num1;
break;
}
stack[stack_top++] = num3;
}
//如果是数字,入栈
else {
stack[stack_top++] = convertToNum(tokens[i]);
}
}
return stack[--stack_top];
}
