0

YAML リーダーを作成したいと考えています。実行する必要がある基本的なタスクの 1 つは、文字列だけを見てエントリの種類を判断することです。(型を明示的に宣言する方法もありますが、暗黙的な型付けは YAML の最も魅力的な機能の 1 つです)

基本的に、私が注意したい型は、整数、浮動小数点数、文字列、真偽値の真/偽、および null (空のフィールドで表される) です。

文字列、true/false、null、これらは簡単に検出できます。しかし、整数、特に浮動小数点数は、さまざまな方法で記述でき、通常は記述されているため、問題を引き起こしています (浮動小数点数は科学表記法で、整数は 16 進数で表記されることがあります)。

私の質問: C++ では、数字を含む文字列を同じように簡単に表現し、その文字列表現を適切な値に変換できるフィールドから、浮動小数点または整数を認識する良い方法は何ですか?

float が取ることができる形式 (おそらく完全なリストではない) は次のとおりです。

0.0
0.0f
0.f
0.
+0.0
-0.0e+413

整数は次の形式を取ります。

99    // decimal
077   // octal
0xFF  // hex
-10
+10
4

1 に答える 1

2

新しい C++11正規表現機能の使用をお勧めしますが、すべてのコンパイラがまだこれを完全にサポートしているわけではないという警告があります。Visual Studio 2010 はサポートしていますが、GCC は部分的なサポートしかありません。

もう 1 つの方法は、区切り記号の間のテキストを読み取って、値の全文を取得することです。次に、それが文字列かブール値かを確認し、そうでない場合は、たとえばstrtod関数を使用して浮動小数点数として変換しようとし、それが失敗した場合 (これを検出する方法についてはマニュアルページを参照) を使用strtolして解析を試みます整数として。

于 2012-08-03T05:48:24.760 に答える