ys memos

Blog

Leetcode 8 String to Integer


leetcode

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_MAXINT_MINを返す。

  catch(std::out_of_range& e){
    if( str[str.find_first_not_of(' ')] == '-') return INT_MIN;
    else return INT_MAX;
  }
}

関連タグを探す