题目描述
输入一个由数字组成的字符串,把它转换成整数并输出。例如:输入字符串"123",输出整数123。
给定函数原型int StrToInt(const char *str) ,实现字符串转换成整数的功能,不能使用库函数atoi。
package main
import (
"strings"
"fmt"
)
func atoi(str string) (int32, error) {
const INT_MAX = int32(^uint32(0) >> 1)
const INT_MIN = ^INT_MAX
// 处理空字符
str = strings.Trim(str, " ")
if len(str) == 0 {
return 0, nil
}
// 处理正负号
index := 0
var sign int64 = 1
runes := []rune(str)
if runes[index] == '+' || runes[index] == '-' {
if runes[index] == '-' {
sign = -1
}
index++
}
// 计算数值
var res int64 = 0
for _, v := range runes[index:] {
if v >= '0' && v <= '9' {
res = res*10 + int64(v-'0')
} else {
return 0, fmt.Errorf("bad input: %v", str)
}
if sign == -1 && sign*res < int64(INT_MIN) {
res = int64(INT_MIN)
break
} else if sign == 1 && res > int64(INT_MAX) {
res = int64(INT_MAX)
break
}
}
return int32(sign * res), nil
}
func main() {
str := " "
value, err := atoi(str)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(value)
}