"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > C++에서 문자열을 정수로 변환할 때 변환 오류를 어떻게 처리합니까?

C++에서 문자열을 정수로 변환할 때 변환 오류를 어떻게 처리합니까?

2024년 11월 15일에 게시됨
검색:685

How can I handle conversion errors when converting a string to an integer in C  ?

C의 오류 처리를 사용하여 문자열을 정수로 변환

문자열을 정수로 변환하는 것은 프로그래밍에서 일반적인 작업입니다. 그러나 문자열 값을 정수로 성공적으로 변환할 수 없는 경우가 있을 수 있습니다. 이러한 시나리오에서는 변환 실패를 적절하게 처리하는 것이 중요합니다.

boost::lexical_cast

오류가 있는 문자열을 int로 변환하는 가장 간단한 방법 중 하나 처리는 Boost::lexical_cast 함수를 사용하는 것입니다. 이 함수는 변환을 진행할 수 없는 경우 예외를 발생시켜 이를 포착하고 적절하게 응답할 수 있도록 합니다.

#include 

int main() {
  std::string s;
  std::cin >> s;

  try {
    int i = boost::lexical_cast(s);
  } catch (...) {
    // Handle the conversion failure
  }
}

표준 라이브러리 함수 사용

부스트를 사용하지 않는 또 다른 접근 방식은 std::stringstream 및 std::bad_cast와 같은 표준 라이브러리 함수를 활용하는 것입니다.

#include 
#include 

int main() {
  std::string s;
  std::cin >> s;

  std::stringstream ss(s);
  int i;

  if ((ss >> i).fail() || !(ss >> std::ws).eof()) {
    throw std::bad_cast();
  }
}

사용자 정의 함수

사용자 정의를 위해 Boost::lexical_cast의 기능을 에뮬레이트하고 변환 실패를 관리하는 함수를 생성할 수 있습니다.

template 
T lexical_cast(const std::string& s) {
  std::stringstream ss(s);
  T result;

  if ((ss >> result).fail() || !(ss >> std::ws).eof()) {
    throw std::bad_cast();
  }

  return result;
}

throwing 버전 없음

예외 발생을 피하고 싶다면 예외를 포착하고 실패를 반환하여 위 함수의 throw 없는 버전을 만들 수 있습니다. 표시기.

template 
bool lexical_cast(const std::string& s, T& t) {
  try {
    t = lexical_cast(s);
    return true;
  } catch (const std::bad_cast& e) {
    return false;
  }
}

이러한 메서드를 사용하면 잠재적인 변환 실패를 처리하면서 문자열을 정수로 효율적으로 변환할 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3