我想写一个YAML阅读器,它必须执行的一个更基本的职责是通过单独查看它的字符串来确定条目的类型。 (有明确声明类型的方法,但隐式输入是YAML最具吸引力的功能之一)
很多时候,我要注意的类型是整数,浮点数,字符串,布尔值true / false和null(由空字段表示)
字符串,true / false,null,这些很容易检测。但是整数和尤其是浮点数正在给我带来麻烦,只是通过多少不同的方式来编写(浮点数有时用科学记数法表示,整数用十六进制表示等)。
我的问题:在C ++中,识别浮点数或整数的好方法是来自一个字段,它可以很容易地表示包含数字的字符串并将其转换为字符串表示成适当的值?
float可以采用的格式(可能不是详尽的列表)是:
0.0
0.0f
0.f
0.
+0.0
-0.0e+413
虽然整数会采用以下形式:
99 // decimal
077 // octal
0xFF // hex
-10
+10
答案 0 :(得分:2)
我建议使用新的C ++ 11 regular expression functionality,但警告并非所有编译器都对此有完全的支持。 Visual Studio 2010可以,而GCC只有部分支持。
另一种方法是读取分隔符之间的文本,以便获得值的全文。然后检查它是否是字符串或布尔值,如果不是,则使用例如strtod
函数尝试将其转换为浮点数,如果失败(请参阅有关如何检测此问题的手册页),请使用strtol
尝试将其解析为整数。< / p>