問題:
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 サイトの他の関連記事を参照してください。