Para demostrar la seguridad OFERTA cadena en un entero

La conversión de una cadena en un entero

La conversión de una cadena en un entero, la solicitud no puede utilizar la función de biblioteca convierte la cadena de número entero. Valor de 0 o una cadena de caracteres no es un valor válido de 0 devuelve
Descripción Entrada:
introducir una cadena de caracteres que incluye símbolos alfanuméricos, puede estar vacío
Descripción de salida:
Si la expresión es el valor se devuelve número válido, de lo contrario 0

Ideas de resolución de problemas

medios para resolver el problema está representado por la cadena analizando no es un entero, una cadena puede firmar el frente, sólo por detrás de números, letras u otros símbolos no pueden tener. Considera también el problema de desbordamiento, ese número debe estar entre [-2 ^ 31,2 ^ 31-1].

  • El primer paso: primero juicio, no un número, entonces sólo '+' or'- 'y no puede ser sólo una
  • Paso dos: desde el principio para atravesar la cadena, el primero es saltarse el primer símbolo, no un número de volver de inmediato, mientras que el cálculo de enteros
  • El tercer paso: Devuelve resultados

Cálculo de un valor absoluto de un número entero, que debe ser un número positivo si <= 2 ^ 31-1, si el negativo debe ser <= 31 ^ 2;
con un registro de límite de variable de este límite, el valor predeterminado es 2 ^ 31-1, cuando el negativo a la actualización

function StrToInt(str)
{
    if(str.length == 0) return 0
    let res = 0,flag = 1
    let limit = 2147483647  //2^31-1
    let i=0
    //若第一位不是数字,则必须是‘+’‘—’且不能只有一位
    if(!(str[0]>'0'&&str[0]<'9')){
        if(str[0]==='-'){
            limit = 2147483648
            flag = -1
        }else if(str[0]!='+'){  //不是'-'就只能是'+'
            return 0
        }
        if(str.length == 1) return 0
        i++  //跳过符号位
    }
    
    let limitmin = limit/10  //针对res*10可能越界建立的变量
    for(;i<str.length;i++){
        if(!(str[i]>'0'&&str[i]<'9')){
            return 0
        }
        //边界处理分为两步,因为这两步都可能越界
        if(res>limitmin) return 0
        res = res*10
        if(res+(str[i]-'0')>limit) return 0  //str[i]-'0'把字符串转化为数字的方法
        res = res+(str[i]-'0')
    }
    return res*flag
}
Publicado 21 artículos originales · ganado elogios 0 · Vistas 165

Supongo que te gusta

Origin blog.csdn.net/adrenalineiszzz/article/details/105001821
Recomendado
Clasificación