思路:逆波兰数需要使用到一个结果栈,当遇到数字入栈,当遇到运算符就会出栈两个值并进行该运算符的操作,将计算结果入栈;
核心1:
//判断是否是运算符,因为负数的第一位也是'-'因此要进行判别
if(('+' == **tokens || '-' == **tokens || '*' == **tokens || '/' == **tokens) && 1 == strlen(*tokens))
核心2:
将字符串转换为数字:(记得判断是否为负数)
int transition(char* str) {
if (NULL == str) {
puts("arg error");
return -1;
}
int len = strlen(str);
int ret = 0;
if (len == 1) {
ret = *str - '0';
return ret;
}
int a = 1;
if(*str == '-')
{
str++;
a = -1;
}
while (*str) {
ret = ret * 10 + (*str - '0');
str++;
}
return ret*a;
}