C のエラー処理を使用して文字列を整数に変換する方法

DDD
リリース: 2024-11-06 03:38:02
オリジナル
775 人が閲覧しました

How to Convert Strings to Integers with Error Handling in C  ?

C のエラー処理を使用した文字列の整数への変換

プログラミングでは、多くの場合、文字列を整数に変換する必要があります。 C ではこの目的のために std::atoi 関数が提供されていますが、変換エラーは適切に処理されません。これに対処するために、C# の Int32.TryParse と同様のエラー処理を可能にするソリューションを模索します。

Boost の字句キャスト関数

効率的なアプローチは、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 error
    }
}</code>
ログイン後にコピー

標準ライブラリ関数の使用

Boost が利用できない場合は、std::stringstream と >> の組み合わせが使用されます。演算子を使用できます:

<code class="cpp">#include <iostream>
#include <sstream>
#include <string>

int main() {
    std::string s;
    std::cin >> s;

    try {
        std::stringstream ss(s);

        int i;
        if ((ss >> i).fail() || !(ss >> std::ws).eof()) {
            throw std::bad_cast();
        }

        // ...
    } catch (...) {
        // Handle error
    }
}</code>
ログイン後にコピー

Boost の Lexical Cast の偽装

最後の代替として、Boost の lexical_cast 関数の「偽」バージョンを作成できます:

<code class="cpp">#include <iostream>
#include <sstream>
#include <string>

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;
}

int main() {
    std::string s;
    std::cin >> s;

    try {
        int i = lexical_cast<int>(s);

        // ...
    } catch (...) {
        // Handle error
    }
}</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;
    }
}

int main() {
    std::string s;
    std::cin >> s;

    int i;
    if (!lexical_cast(s, i)) {
        std::cout << "Bad cast." << std::endl;
    }
}</code>
ログイン後にコピー

以上がC のエラー処理を使用して文字列を整数に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!