剣指Offer-49.文字列を整数に変換(C++/Java)

5891 ワード

タイトル:
文字列を整数に変換するには、文字列を使用して整数を変換できないライブラリ関数が必要です.値が0または文字列が正当な値でない場合は0を返します.
説明を入力:
       ,        ,    

出力の説明:
                ,    0

分析:
注意入力データの正当性、例えば「1234+12」、「12@#*24」は、いずれも非合法な数値であり、0を返します.しかし、最初の文字の場合+または-の場合は可能であり、最後に出力された記号に影響を与え、最後に数字が範囲を超えているかどうかを判断します.
プログラム:
C++
class Solution {
public:
    int StrToInt(string str) {
        if(str.size() == 0)
            return 0;
        long long num = 0;
        bool tag = true;
        if(str[0] == '-')
            tag = false;
        for(int i = (str[0] == '+' || str[0] == '-' ? 1 : 0); i < str.size(); ++i){
            if(str[i] >= '0' && str[i] <= '9'){
                num = num * 10 + (str[i] - '0');
            }
            else{
                num = 0;
                break;
            }
        }
        num = tag ? num : (-num);
        if(num > INT_MAX || num < INT_MIN)
            return 0;
        return (int)num;
    }
};

Java
public class Solution {
    public int StrToInt(String str) {
        if(str == null || str.length() == 0)
            return 0;
        long num = 0;
        boolean tag = true;
        if(str.charAt(0) == '-')
            tag = false;
        for(int i = (str.charAt(0) == '+' || str.charAt(0) == '-' ? 1 : 0); i < str.length(); ++i){
            if(str.charAt(i) >= '0' && str.charAt(i) <= '9'){
                num = num * 10 + (str.charAt(i) - '0');
            }
            else{
                num = 0;
                break;
            }
        }
        num = tag ? num : (-num);
        if(num > Integer.MAX_VALUE || num < Integer.MIN_VALUE)
            return 0;
        return (int)num;
    }
}