Implement a basic calculator to evaluate a simple expression string.
The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division should truncate toward zero.
Example 1:
Input: “3+2*2”
Output: 7
Example 2:
Input: " 3/2 "
Output: 1
Example 3:
Input: " 3+5 / 2 "
Output: 5
Note:
You may assume that the given expression is always valid.
Do not use the eval built-in library function.
func calculate(s string) int {
res, curr := 0, 0
st := []int{}
preOpt := '+'
for i, v := range s {
if unicode.IsDigit(v) {
curr = curr*10 + int(s[i]-'0')
preOpt = preOpt
}
if i == len(s)-1 || s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/' {
val := curr
switch preOpt {
case '-':
val = -val
case '*':
val = st[len(st)-1] * curr
st = st[:len(st)-1]
case '/':
val = st[len(st)-1] / curr
st = st[:len(st)-1]
}
st = append(st, val)
curr = 0
preOpt = v
}
}
for _, v := range st {
res += v
}
return res
}