简介:
在 C 中,将字符串转换为整数可能是一项简单的任务,但在某些情况下我们可能会遇到转换失败。在这种情况下,有必要优雅地处理这些异常或失败。
Boost::lexical_cast:
Boost 提供了一个具有许多实用程序的多功能库,包括 boost: :lexical_cast。该函数允许将字符串转换为各种数据类型,并在失败时抛出异常。例如:
<code class="cpp">#include <boost/lexical_cast.hpp> int i = boost::lexical_cast<int>(s);</code>
没有 Boost:
如果 Boost 不可用,我们可以使用基于 C 流的方法:
<code class="cpp">#include <sstream> int i; std::stringstream ss(s); if ((ss >> i).fail() || !(ss >> std::ws).eof()) { throw std::bad_cast(); }</code>
伪造 Boost:
在没有 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>
否-抛出版本:
如果需要,可以通过捕获适当的异常并返回指示成功或失败的布尔值来创建这些函数的非抛出版本:
<code class="cpp">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中文网其他相关文章!