2012-08-03 36 views
0

我想寫一個YAML閱讀器,它必須執行的一個更基本的職責是通過單獨查看字符串來確定條目的類型。 (有明確聲明類型的方法,但隱式類型是YAML最具吸引力的功能之一)根據值的字符串表示形式確定值的類型?

本質上,我要注意的類型是整數,浮點數,字符串,布爾值true/false和空值由空字段表示)

字符串,true/false,null,這些很容易檢測到。但是整數和浮點數都會給我帶來麻煩,只是通過多少種不同的方式,通常是寫入的(浮點數有時以科學記數法表示,以十六進制數表示,等等)。

我的問題:在C++中什麼是認識從現場的浮動或整數,,可以很容易地表示包含數字串並轉換它的字符串表示到適當值的好辦法?

浮子可採取的格式(可能不是一個詳盡的列表)包括:

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

雖然整數將採取形式:

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

你想從頭開始或使用庫嗎? – fstamour 2012-08-03 02:57:24

+2

如果您的編譯器符合C++ 11,則它具有正則表達式。這很容易(如果你對正則表達式有一些基本的瞭解)可以使用它們來做你所要求的。 – fstamour 2012-08-03 02:59:54

+0

@Sharpie - 如果可能的話沒有圖書館。我看着正則表達式頭,它似乎也只是答案!但是......我對正則表達式的把握對於一個事物的掌握可能有點脆弱。 – 2012-08-03 03:08:31

回答

2

我會建議使用新的C + +11 regular expression functionality,但有一個警告,並不是所有的編譯器都完全支持這個。 Visual Studio 2010,而GCC只有部分支持。

另一種方法是讀取分隔符之間的文本,以便獲得值的全文。然後檢查它是字符串還是布爾值,如果不是,則使用例如strtod函數嘗試並將其轉換爲浮點數,如果失敗(請參閱手冊頁中有關如何檢測此問題),請使用strtol嘗試將其解析爲整數。

相關問題