C++请参见参数是否为数字

Igo*_*gor 1 c++ numeric command-line-arguments

我正在用C++创建加密/解密程序,我使用三个用户提供的数字来自定义加密.我在cplusplus.com上读到了关于isdigit()的内容,并根据它做了一个函数:

bool is_numeric(char *string)
{
    int sizeOfString = sizeof(string);
    int iteration = 0;
    bool isNumeric = true;

    while(iteration < sizeOfString)
    {
        if(!isdigit(string[iteration]))
        {
            isNumeric = false;
            break;
        }

        iteration++;

    }

    return isNumeric;
}
Run Code Online (Sandbox Code Playgroud)

但是,它似乎不起作用.无论我给它一个数字,还是一个非数字字符,它仍然返回false.我的方法出了什么问题.

Jer*_*fin 5

我想我会使用标准算法:

bool is_numeric(char const *string)
{
    return std::all_of(string, string+strlen(string), 
                       [](unsigned char c) { return ::isdigit(c); });
}
Run Code Online (Sandbox Code Playgroud)

请注意,就目前而言,您的代码可能(通常会)具有未定义的行为(如果字符串包含在编码为char时作为负数的任何内容).这段代码通过将其转换为传递给lambda的char一个unsigned char来防止 - 这就是我使用lambda而不是仅仅::isdigit作为谓词传递的原因all_of.