Problem:
Converting strings to integers in C often presents the problem of handling invalid conversions. This raises the need for an efficient method to perform such conversions with the ability to indicate failure.
Solution: Boost's Lexical Cast
Boost's lexical_cast library offers a robust solution for safe string-to-integer conversions. It throws an exception when encountering an invalid conversion:
<code class="cpp">#include <boost/lexical_cast.hpp> try { int i = boost::lexical_cast<int>(s); // Success handling } catch(...) { // Failure handling }</code>
Alternative Without Boost: Standard Streams and Exceptions
If Boost is unavailable, you can use standard input/output stream operations with exceptions:
<code class="cpp">#include <iostream> #include <sstream> #include <string> try { std::stringstream ss(s); int i; if ((ss >> i).fail() || !(ss >> std::ws).eof()) throw std::bad_cast(); // Success handling } catch(...) { // Failure handling }</code>
Faking Boost's Lexical Cast (Optional)
You can create a customized version of lexical_cast without using Boost:
<code class="cpp">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; }</code>
No-Throw Versions (Optional)
For no-throw versions, handle exceptions within the lexical_cast function:
<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; } }</code>
The above is the detailed content of How Can I Convert Strings to Integers in C While Handling Conversion Errors?. For more information, please follow other related articles on the PHP Chinese website!