2020/05/26
はじめに
入力string str
を数値に変換する問題
この時、スペースを除いた先頭の数字を数値に変換する。 先頭が数字でない場合、0を返す。 int型の範囲に収まらない場合、正ならintの最大値を、負ならintの最小値を返す。
<例>
"42" -> 42
" -42" -> -42
"4193 with words" -> 4193
"words and 987" -> 0
"-91283472332" -> -2147483648
コード全体
int myAtoi(string str) {
try {
return stoi(str);
}
catch(std::invalid_argument& e){
return 0;
}
catch(std::out_of_range& e){
if( str[str.find_first_not_of(' ')] == '-') return INT_MIN;
else return INT_MAX;
}
}
解説
std::stoi()
を用いて、str
をint型の整数に変換する。
変換が成功した場合はその値を返す。
int myAtoi(string str) {
try {
return stoi(str);
}
std::stoi()
は、場合、std::invalid_argument
例外を投げる。
その場合、0を返す。
catch(std::invalid_argument& e){
return 0;
}
std::stoi()
は、文字列が範囲外の場合、std::out_of_range
例外を投げる。
スペースをのぞく先頭の文字が'-'か否かで、INT_MAX
かINT_MIN
を返す。
catch(std::out_of_range& e){
if( str[str.find_first_not_of(' ')] == '-') return INT_MIN;
else return INT_MAX;
}
}