zoukankan      html  css  js  c++  java
  • JZ49 把字符串转换成整数

    把字符串转换成整数

    题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0.

    思路:这道题其实没有想象的那么多的边界条件,也没有那么繁琐。首先理解题目意思,是字符串转换为整数,不是小数,没有小数点或科学计数法的考量。

    然后一个字符转换为整数的方法是,res = res * 10 + str[i] - '0';

    边界情况

    1)开始都是空格

    2)考量第一个出现的字符是+,-

    3)转换的数字大于INT_MAX,小于INT_MIN。

    4)出现其他非数字字符。

    使用一个全局变量记录是否是输入错误,因为return 0有很多种情况,也可能是字符串就一个0,返回也是0,因此需要设置一个变量区分开来。

    func StrToInt(str string) int {
        res := 0
        flag := 1
        start := 0
        // space
        for start <= len(str)-1 && str[start] == ' ' {
            start++
        }
        // +/-
        if start <= len(str)-1 {
            if str[start] == '-' {
                flag = -1
                start++
            } else if str[start] == '+' {
                start++
            }
        }
        // is digital ?
        for start <= len(str)-1  {
            if !isDigital(str[start]) {
                return 0
            }
            if res == 0 {
                res += int(str[start] - '0')
                start++
            } else {
                res = res*10 + int((str[start] - '0'))
                start++
            }
            // overflow int32
            if res*flag > math.MaxInt32 {
                return math.MaxInt32
            } else if res*flag < math.MinInt32 {
                return math.MinInt32
            }
        }
    
        res *= flag
        return res
    }
    
    func isDigital(b byte) bool {
        if b <= '9' && b >= '0' {
            return true
        }
        return false
    }
  • 相关阅读:
    linux 串口调试总结
    linux 环境变量的设置方法
    linux 内核的配置和编译
    linux 串口应用程序的编写指南
    linuxdifff 和 patch 的使用指南
    linux shell 的学习随笔
    特性阻抗和频率有关吗?
    linux source和export命令的使用
    关于SI设计与SI仿真的一点浅见
    LINUX下的tty,console与串口分析
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/14642059.html
Copyright © 2011-2022 走看看