问题:
在 C 中将字符串转换为整数通常会出现以下情况处理无效转换的问题。这就需要一种有效的方法来执行此类转换,并能够指示失败。
解决方案:Boost 的 Lexical Cast
Boost 的 lexical_cast 库提供了一个强大的解决方案安全的字符串到整数的转换。遇到无效转换时会抛出异常:
<code class="cpp">#include <boost/lexical_cast.hpp> try { int i = boost::lexical_cast<int>(s); // Success handling } catch(...) { // Failure handling }</code>
没有 Boost 的替代方案:标准流和异常
如果 Boost 不可用,您可以使用标准输入/有例外的输出流操作:
<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>
伪造 Boost 的 Lexical Cast(可选)
您可以在不使用 Boost 的情况下创建 lexical_cast 的自定义版本:
<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>
无抛出版本(可选)
对于无抛出版本,处理 lexical_cast 函数中的异常:
<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>
以上是如何在 C 中将字符串转换为整数并处理转换错误?的详细内容。更多信息请关注PHP中文网其他相关文章!