Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C+中输入数字+;带后缀符号 如何用C++输入100K或30M或41.2G的数字?是否有一个库函数用于此?还是我应该自己编写解析器_C++_Input_Numbers_Postfix Notation - Fatal编程技术网

在C+中输入数字+;带后缀符号 如何用C++输入100K或30M或41.2G的数字?是否有一个库函数用于此?还是我应该自己编写解析器

在C+中输入数字+;带后缀符号 如何用C++输入100K或30M或41.2G的数字?是否有一个库函数用于此?还是我应该自己编写解析器,c++,input,numbers,postfix-notation,C++,Input,Numbers,Postfix Notation,编辑: 我自己想出了一个解决办法: 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.

编辑: 我自己想出了一个解决办法:

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

你真的想要一个图书馆吗?你自己这样定义东西怎么样:

typedef double T;
T k = 1e3;
T M = 1e6;
T G = 1e9;
T m = 1e-3;
T u = 1e-6;
然后把它们当作被乘数使用


也许这些名字并不直接是最好的;您可以找到一个更好的约定,它不会与程序中的任何内容发生冲突。

您希望使用C++11的
运算符“”
,类似于以下内容:

constexpr long operator"" k(long d) {
     return d * 1000;
}
然后可以创建如下常量:

long distance = 100k;

这些示例无法解释您的格式实际上是什么。但是即使不知道你想要什么,标准库中也没有什么(尽管2011,可能会有帮助)。不,标准的C++编译器不接受不知道是否有任何解析器,但是编写一个解析器并不困难。<代码> 41.2G对我来说并不是特别的数字。你如何定义一个数字的样子?你的定义应该更加明确-给我们一些规则。不幸的是,要求一个库不符合StackOverflow准则。如果您在为解析器编写的代码方面有一些具体问题,我们很乐意提供帮助。