8. 字符串转换整数 (atoi)

image.png

这道主要是需要考虑这个bad case

  1. package main
  2. import (
  3. "math"
  4. "fmt"
  5. "strings"
  6. )
  7. func myAtoi(str string) int {
  8. //去掉收尾空格
  9. str = strings.TrimSpace(str)
  10. result := 0
  11. sign := 1
  12. for i, v := range str {
  13. if v >= '0' && v <= '9' {
  14. result = result*10 + int(v-'0')
  15. } else if v == '-' && i == 0 {
  16. sign = -1
  17. } else if v == '+' && i == 0 {
  18. sign = 1
  19. } else {
  20. break
  21. }
  22. // 数值最大检测
  23. if result > math.MaxInt32 {
  24. if sign == -1 {
  25. return math.MinInt32
  26. }
  27. return math.MaxInt32
  28. }
  29. }
  30. return sign * result
  31. }
  32. func main() {
  33. fmt.Println(myAtoi("42"))
  34. fmt.Println(myAtoi( " -42"))
  35. fmt.Println(myAtoi("4193 with words"))
  36. fmt.Println(myAtoi("words and 987"))
  37. }