프로그래밍에서는 문자열을 정수로 변환해야 하는 경우가 많습니다. C에서는 이러한 목적으로 std::atoi 함수를 제공하지만 변환 오류를 정상적으로 처리하지는 않습니다. 이 문제를 해결하기 위해 우리는 C#의 Int32.TryParse와 유사한 오류 처리를 허용하는 솔루션을 찾습니다.
효율적인 접근 방식은 Boost 라이브러리의 lexical_cast 함수를 사용하는 것입니다. . 다양한 데이터 유형을 지원하며 캐스트가 실패하면 예외를 발생시킬 수 있습니다. 예는 다음과 같습니다.
<code class="cpp">#include <boost/lexical_cast.hpp> int main() { std::string s; std::cin >> s; try { int i = boost::lexical_cast<int>(s); // ... } catch (...) { // Handle error } }</code>
Boost를 사용할 수 없는 경우 std::stringstream 및 >> 연산자를 사용할 수 있습니다:
<code class="cpp">#include <iostream> #include <sstream> #include <string> int main() { std::string s; std::cin >> s; try { std::stringstream ss(s); int i; if ((ss >> i).fail() || !(ss >> std::ws).eof()) { throw std::bad_cast(); } // ... } catch (...) { // Handle error } }</code>
최종 대안으로 Boost의 lexical_cast 함수의 "가짜" 버전을 만들 수 있습니다.
<code class="cpp">#include <iostream> #include <sstream> #include <string> template <typename T> 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; } int main() { std::string s; std::cin >> s; try { int i = lexical_cast<int>(s); // ... } catch (...) { // Handle error } }</code>
투척 없음 버전이 필요한 경우 적절한 예외를 포착하고 성공 또는 실패를 나타내는 부울을 반환합니다.
<code class="cpp">template <typename T> bool lexical_cast(const std::string& s, T& t) { try { t = lexical_cast<T>(s); return true; } catch (const std::bad_cast& e) { return false; } } int main() { std::string s; std::cin >> s; int i; if (!lexical_cast(s, i)) { std::cout << "Bad cast." << std::endl; } }</code>
위 내용은 C에서 오류 처리를 사용하여 문자열을 정수로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!