概要:
C では、文字列を文字列に変換しますinteger は簡単なタスクですが、場合によっては変換エラーが発生する可能性があります。このようなシナリオでは、これらの例外や失敗を適切に処理する必要があります。
Boost::lexical_cast:
Boost は、boost を含む多数のユーティリティを備えた多用途ライブラリを提供します。 :lexical_cast.この関数を使用すると、文字列をさまざまなデータ型に変換でき、失敗した場合には例外がスローされます。例:
<code class="cpp">#include <boost/lexical_cast.hpp> int i = boost::lexical_cast<int>(s);</code>
ブーストなし:
ブーストが利用できない場合は、C ストリームベースのアプローチを利用できます:
<code class="cpp">#include <sstream> int i; std::stringstream ss(s); if ((ss >> i).fail() || !(ss >> std::ws).eof()) { throw std::bad_cast(); }</code>
偽のブースト:
ブーストがない場合、その機能を模倣するカスタム関数を作成することが可能です:
<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">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 サイトの他の関連記事を参照してください。