2013-09-25 54 views
0

如何使用C++輸入像100k或30M或41.2G這樣的數字?是否有一個庫函數?或者我應該自己寫一個解析器?C++中輸入數字後綴表示法

編輯: 我想出了一個解決方案自己:

static float my_strtod(const char *str) 
{ 
    char *pEnd; 
    double val = strtod(str, &pEnd); 
    switch (*pEnd) 
    { 
     case 'k' : val *= 1.0e3; break; 
     case 'M' : val *= 1.0e6; break; 
     case 'G' : val *= 1.0e9; break; 
    } 
    return val; 
} // end of my_strtod 
+0

這些例子並不能說明你的格式實際上是。但即使沒有確切地知道你想要什麼,標準庫中也沒有任何東西(儘管自2011年以來,['regex'](http://en.cppreference.com/w/cpp/regex/basic_regex)可能會有所幫助)。 – BoBTFish

+0

不,符合標準的C++編譯器不會接受 –

+1

我不知道是否有解析器,但爲此編寫解析器並不困難 –

回答

0

你真的想要一個圖書館嗎?如何自己定義這樣的東西:

typedef double T; 
T k = 1e3; 
T M = 1e6; 
T G = 1e9; 
T m = 1e-3; 
T u = 1e-6; 

然後只是將它們用作被乘數?

也許這些名稱並不是最好的;你可以找到一個更好的約定,不會與你的程序中的任何內容相沖突。

2

你想用C++ 11的operator"",這樣的事情:

constexpr long operator"" k(long d) { 
    return d * 1000; 
} 

那麼你可以創建這樣的常數:

long distance = 100k; 
+0

哦,這很酷! – usr2564301