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