問題:
在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中文網其他相關文章!