整数に文字列オファー安全性を証明するために、

文字列を整数に変換します

文字列を整数に変換する、ライブラリの関数を使用することはできません要求は整数文字列に変換します。0の値や文字列は、0を返すの有効な値ではありません
入力説明:
英数字記号を含む文字列を入力して、空にすることができ
、出力説明:
式が有効な数値値がそれ以外の場合は、返却されている場合は0

問題解決のためのアイデア

文字列で表されている問題を解決するための手段を分析すると、文字列が数字のみ、文字または持つことができない他のシンボルの後ろに、フロントに署名することができ、整数ではありません。また、オーバーフローの問題を考慮し、その数の間でなければならない[-2 ^ 31,2 ^ 31-1]。

  • 最初のステップ:最初の判断、数ではなく、唯一の「+」OR'-「とだけすることはできません
  • ステップ2:文字列を横断する最初から、最初の最初のシンボルをスキップすることで、すぐに返さない数、整数演算、一方
  • 第三段階:リターン結果

ネガ<^ 2 = 31でなければならない場合は、<= 2 ^ 31-1場合に整数の絶対値を算出し、それは正の数である必要があり、;
可変リミットレコードとこの境界とき負、デフォルトでは、2 ^ 31-1であります更新へ

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
}
公開された21元の記事 ウォンの賞賛0 ビュー165

おすすめ

転載: blog.csdn.net/adrenalineiszzz/article/details/105001821