2013-09-25 26 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