【发布时间】:2012-08-03 02:24:31
【问题描述】:
我想编写一个 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
【问题讨论】:
-
您想从头开始还是使用库?
-
如果你的编译器是 C++11 兼容的,它有正则表达式。使用这些来做你要求的事情会很容易(如果你对正则表达式有一些基本的了解)。
-
@Sharpie - 如果可能,没有库。我查看了正则表达式标题,它似乎也只是答案!但是...我对正则表达式的掌握是脆弱的。
-
我建议你搜索 SO 来解析东西,对不起,我不是专家,但你真的应该对正则表达式有一些概念,我发誓它非常有用!!跨度>
-
看起来所有浮点数,只有浮点数包含
.。这很简单。所有十六进制常量,只有十六进制常量以0x开头。所有八进制常量,只有八进制常量以0[0-7]开头。其他任何东西都是十进制的。真的那么简单吗?