0

我想编写一个 YAML 阅读器,它必须执行的一项更基本的职责是通过单独查看条目的字符串来确定条目的类型。(有一些方法可以显式声明类型,但隐式类型是 YAML 最吸引人的特性之一)

从本质上讲,我要注意的类型是整数、浮点数、字符串、布尔值 true/false 和 null(由空字段表示)

字符串,真/假,空,这些很容易检测。但是整数,尤其是浮点数给我带来了麻烦,只是通过它们可以并且通常以多少不同的方式写入(浮点数有时以科学记数法出现,整数以十六进制表示,等等)。

我的问题:在 C++ 中,从可以轻松表示包含数字的字符串并将其字符串表示形式转换为适当值的字段中识别浮点数或整数的好方法是什么?

浮点数可以采用的格式(可能不是详尽的列表)是:

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 仅提供部分支持。

Another way is to read the text between the separators so you have the full text of the value. Then check for if it's a string or boolean, and if not then use e.g. the strtod function to try and convert it as a floating point number, and if that fails (see the manual page on how to detect this) use strtol to try and parse it as a an integer.

于 2012-08-03T05:48:24.760 回答