| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | 
							- package main
 
- import (
 
- 	"fmt"
 
- 	"math"
 
- 	"strings"
 
- )
 
- func myAtoi(str string) int {
 
- 	str = strings.Trim(str, " ")
 
- 	if len(str) == 0 {
 
- 		return 0
 
- 	}
 
- 	chars := []rune(str)
 
- 	beg, end := 0, 0
 
- 	isNegative := false
 
- 	// judge the sign of the integer
 
- 	switch chars[beg] {
 
- 	case '-':
 
- 		isNegative = true
 
- 		fallthrough
 
- 	case '+':
 
- 		beg, end = 1, 1
 
- 		// deal with "+" or "-"
 
- 		if len(str) == 1 {
 
- 			return 0
 
- 		}
 
- 	default:
 
- 		beg, end = 0, 0
 
- 	}
 
- 	// find the first non-zero digit and the last valid digit
 
- 	for ; end <= len(chars); end++ {
 
- 		if chars[beg] == '0' {
 
- 			beg++
 
- 			// for str like "000000000000", return 0
 
- 			if beg == len(chars) {
 
- 				return 0
 
- 			}
 
- 			continue
 
- 		}
 
- 		if end == len(chars) || chars[end] < '0' || '9' < chars[end] {
 
- 			break
 
- 		}
 
- 	}
 
- 	if beg == end {
 
- 		// no valid digit
 
- 		return 0
 
- 	} else if end-beg > 10 { // overflow (MaxInt32 & MinInt32 have 10 digits only)
 
- 		if isNegative {
 
- 			return math.MinInt32
 
- 		}
 
- 		return math.MaxInt32
 
- 	}
 
- 	sum, base := int64(0), int64(1)
 
- 	for ; end > beg; end-- {
 
- 		num := int64(chars[end-1] - '0')
 
- 		sum += num * base
 
- 		base *= int64(10)
 
- 	}
 
- 	if isNegative {
 
- 		sum *= int64(-1)
 
- 	}
 
- 	if sum < math.MinInt32 {
 
- 		return math.MinInt32
 
- 	} else if sum > math.MaxInt32 {
 
- 		return math.MaxInt32
 
- 	}
 
- 	return int(sum)
 
- }
 
- func testMyAtoi(str string) {
 
- 	fmt.Printf("\"%s\" -> %d\n", str, myAtoi(str))
 
- }
 
- /* func main() {
 
- 	testMyAtoi("")
 
- 	testMyAtoi("       00000000000000000000           ")
 
- 	testMyAtoi("+")
 
- 	testMyAtoi("   -0.1    ")
 
- 	testMyAtoi("   +1.1    ")
 
- 	testMyAtoi("   234.1    ")
 
- 	testMyAtoi("42")
 
- 	testMyAtoi("9223372036854775808")
 
- 	testMyAtoi("   -2.1    ")
 
- 	testMyAtoi("   - 0.1    ")
 
- 	testMyAtoi("   num 0.1    ")
 
- } */
 
 
  |