剣指Offer-49.文字列を整数に変換(C++/Java)
5891 ワード
タイトル:
文字列を整数に変換するには、文字列を使用して整数を変換できないライブラリ関数が必要です.値が0または文字列が正当な値でない場合は0を返します.
説明を入力:
出力の説明:
分析:
注意入力データの正当性、例えば「1234+12」、「12@#*24」は、いずれも非合法な数値であり、0を返します.しかし、最初の文字の場合+または-の場合は可能であり、最後に出力された記号に影響を与え、最後に数字が範囲を超えているかどうかを判断します.
プログラム:
C++
Java
文字列を整数に変換するには、文字列を使用して整数を変換できないライブラリ関数が必要です.値が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;
}
}