Itoa
不适用任何库,纯代码实现
func itoa(i int) (ret string) {
neg := false
if i < 0 {
i = -i
neg = true
} else if i == 0 {
return "0"
}
var cs []string
for i > 0 {
cs = append(cs, string(i%10+'0'))
i /= 10
}
for i, j := 0, len(cs)-1; i < j; i, j = i+1, j-1 {
cs[i], cs[j] = cs[j], cs[i]
}
for _, c := range cs {
ret += c
}
if neg {
ret = "-" + ret
}
return ret
}
Atoi
import (
"errors"
)
func atoi(num string) (int, error) {
if len(num) == 0 {
return -1, errors.New("ill num")
}
if num == "0" {
return 0, nil
}
neg := false
if num[0] == '-' {
neg = true
num = num[1:]
} else if num[0] == '+' {
num = num[1:]
}
var cs []int32
for _, n := range num {
c := n - '0'
if c > 9 || c < 0 {
return -1, errors.New("ill num")
}
cs = append(cs, c)
}
ret := 0
x := 1
for i := len(cs) - 1; i >= 0; i-- {
ret = int(cs[i])*x + ret
x *= 10
}
if neg {
ret = -ret
}
return ret, nil
}