ホームページ  >  記事  >  バックエンド開発  >  変換エラーを処理しながら C で文字列を整数に変換するにはどうすればよいですか?

変換エラーを処理しながら C で文字列を整数に変換するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-04 22:49:02956ブラウズ

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>

ブーストを使用しない代替: 標準ストリームと例外

ブーストが利用できない場合は、標準入力/を使用できます。例外のある出力ストリーム操作:

<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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。