描述

写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。传入的字符串可能有以下部分组成:

  1. 若干空格
  2. (可选)一个符号字符('+' 或 '-')
  3. 数字,字母,符号,空格组成的字符串表达式
  4. 若干空格

转换算法如下:

  • 去掉无用的前导空格
  • 第一个非空字符为+或者-号时,作为该整数的正负号,如果没有符号,默认为正数
  • 判断整数的有效部分:

    • 确定符号位之后,与之后面尽可能多的连续数字组合起来成为有效整数数字,如果没有有效的整数部分,那么直接返回0
    • 将字符串前面的整数部分取出,后面可能会存在存在多余的字符(字母,符号,空格等),这些字符可以被忽略,它们对于函数不应该造成影响
    • 整数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231的整数应该被调整为 −231 ,大于 231 − 1 的整数应该被调整为 231 − 1
  • 去掉无用的后导空格

数据范围:

  1. 0 <=字符串长度<= 100
  2. 字符串由英文字母(大写和小写)、数字(0-9)、' '、'+'、'-' 和 '.' 组成
示例
// 输入:
"82"
// 返回值:
82

// 输入:
"   -12  "
// 返回值:
-12
// 说明:去掉前后的空格,为-12

// 输入:
"4396 clearlove"
// 返回值:
4396
// 说明:6后面的字符不属于有效的整数部分,去除,但是返回前面提取的有效部分

// 输入:
"clearlove 4396"
// 返回值:
0

// 输入:
"-987654321111"
// 返回值:
-2147483648
解题思路
  • 去掉前后空格
  • 处理符号位
  • 判断整数有效部分
  • 结果数据范围判断
代码实现
/**
 * [JZ67-中等] 把字符串转换成整数(atoi)
 *
 * @param s string字符串
 * @return int整型
 */
func strToInt(s string) int {
    // 去掉前后空格
    s = strings.Trim(s, " ")
    if len(s) == 0 {
        return 0
    }

    // 处理符号位
    sign := 1
    if s[0] == '-' {
        sign = -1
        s = s[1:]
    } else if s[0] == '+' {
        s = s[1:]
    }

    // 判断整数有效部分
    res := 0
    for _, v := range s {
        // 数据范围
        if v >= '0' && v <= '9' {
            // 将符合条件的整数字符串转化后加入的结果整数中
            res = res*10 + int(v-'0')
        } else {
            break
        }
        if res > int(math.Pow(2, 31)) {
            break
        }
    }
    // 乘以符号位
    res = int(sign) * res

    // 数据范围判断
    if res > int(math.Pow(2, 31)-1) {
        return int(math.Pow(2, 31) - 1)
    }
    if res < int(0-math.Pow(2, 31)) {
        return int(0 - math.Pow(2, 31))
    }

    return int(res)
}

本文由 一切随风 创作,可自由转载、引用,但需署名作者且注明文章出处。

10 条评论

  1. ydmauikrfm
    ydmauikrfm

    一路惊喜

  2. xwrlnboiwk
    xwrlnboiwk

    狂暴2资本的惩罚

  3. syokkltueq
    syokkltueq

    我的世界大电影

  4. sezccjcpcc
    sezccjcpcc

    小银幕大电影

  5. zeapdccjiw
    zeapdccjiw

    大毒枭

  6. wfpolbadpm
    wfpolbadpm

    BamBam南希姐妹的故事

  7. acljxrnvxt
    acljxrnvxt

    死亡电压

  8. hszflnmeqw
    hszflnmeqw

    他她他她

  9. iorsqbozhw
    iorsqbozhw

    你的才华让人瞩目,期待你的更多文章。 https://www.4006400989.com/qyvideo/15310.html

  10. acxyqjjiwt
    acxyqjjiwt

    《同学两亿岁》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/30275.html

添加新评论