首頁 >後端開發 >C++ >如何在 C 中將字串轉換為整數並處理轉換錯誤?

如何在 C 中將字串轉換為整數並處理轉換錯誤?

Barbara Streisand
Barbara Streisand原創
2024-11-04 22:49:021034瀏覽

How Can I Convert Strings to Integers in C   While Handling Conversion Errors?

在C 中使用布林失敗將字串轉換為整數

問題:

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn