使用 C 中的錯誤處理將字串轉換為 int
將字串轉換為整數是程式設計中的常見任務。但是,在某些情況下,字串值可能無法成功轉換為整數。在這種情況下,優雅地處理轉換失敗至關重要。
boost::lexical_cast
將字串轉換為 int 時出現錯誤的最簡單方法之一處理方法是使用 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 the conversion failure } }</code>
使用標準函式庫函數
另一個不使用的方法boost 是利用標準函式庫函數,例如 std::stringstream 和 std::bad_cast。
<code class="cpp">#include <iostream> #include <sstream> int main() { std::string s; std::cin >> s; std::stringstream ss(s); int i; if ((ss >> i).fail() || !(ss >> std::ws).eof()) { throw std::bad_cast(); } }</code>
自訂函數
為了可自訂性,您可以建立一個模擬 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>
非拋出版本
如果您希望避免拋出異常,您可以可以透過擷取異常並傳回失敗指示符來建立上述函數的無拋出版本。
<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中文網其他相關文章!