C ++ブースト:: lexical_cast

1. lexical_castはboostのライブラリであり、主に数値と文字列の間の変換に使用されます。Boostのlexical_castは、文字列をさまざまなC ++組み込み型に変換でき、ヘッダーファイルをインクルードする必要があります。

#include <boost / lexical_cast.hpp>
using namespace boost;

2. lexical_castライブラリは、C言語のatoi関数と同様に、文字列、整数、浮動小数点数の間で変換できる「リテラル」変換を実行します。使用される形式は次のとおりです。

ここに画像の説明を挿入します

Tは、データ型またはテンプレートテンプレートのカスタマイズ(インスタンス化によってのみ認識される型)です。

3. lexical_castを使用する場合、数値に変換される文字列には数値と小数点のみを含めることができ、文字(指数のe / Eを除く)やその他の数字以外の文字を含めることはできないことに注意してください。 、lexical_castは、「123L」、「0x100」など、C ++構文で許可されているデジタルリテラル文字列などに変換できません。

int value = boost :: lexical_cast(“ 123”)
float value = boost :: lexical_cast(“ 1.2”)

4. lexical_castが変換操作を実行できない場合、例外bad_lexical_castがスローされます。

'boost :: exception_detail :: clone_impl <boost :: exception_detail :: error_info_injectorboost :: bad_lexical_cast>'のインスタンスをスローした後に呼び出された終了
what():不正な字句キャスト:ソースタイプ値をターゲットとして解釈できませんでした

たとえば、atoi( "2.5")の値は2で、boost :: lexical_cast( "2.5")はboost :: bad_lexical_castの例外をスローするため、変換を保護するためにtry / catchを使用する必要があります。


{ int i = boost :: lexical_cast(“ 12.3”);を試してください} catch(boost :: bad_lexical_cast&e){ cout << e.what()<< endl; }





5.たとえば、STLライブラリでは、stringstreamを使用して、文字列と数値の間の変換を実現できます。

int i = 0;
stringstream ss;
ss <<“ 123”;
ss >> i;

ただし、stringstreamにはエラーチェック機能がありません。たとえば、次のコードの場合、iは12に割り当てられます。

ss <<“ 12.3”;
ss >> i;

この問題を解決するために、boost :: lexical_castを使用して数値変換を行うことができます。

int i = boost :: lexical_cast(“ 123”);
double d = boost :: lexical_cast(“ 12.3”);

注意!
テキストファイルを読み取る場合、文字列の後に「\ r」または「\ n」の識別子が存在する場合があります。これらは、トリム機能を使用して削除する必要があります。

おすすめ

転載: blog.csdn.net/weixin_41169280/article/details/110000325