你怎么知道长的长度

时间:2018-02-28 13:47:06

标签: c++

我想知道如何获得long long的长度。我有一个简单的函数,我试图获得long long的长度,我也得到一个错误。

while (numberArray[i].length() > MAX_INPUT)
{
    cout << "ERROR: Program can only take in a number length " << MAX_INPUT << " or less. Try again ->";

    cin >> numberArray[i];
}

注意:numberArray是一个静态的int。对.length()的调用工作正常,但我想将类型更改为long long,现在.length()似乎不再有效。

这是我每次尝试运行代码时从编译器获得的消息类型:

In function 'void takeNumbers(std::__cxx11::string&, long long int (&)[11], int)':
main.cpp:48:26: error: request for member 'length' in 'numberArray[i]', which is of non-class type 'long long int'
    while (numberArray[i].length() > MAX_INPUT){

3 个答案:

答案 0 :(得分:3)

在C ++中,普通旧数据类型(如long long int)没有用于获取其长度的成员函数。如果你想要一个整数的长度,你可以将数字转换为一个字符串,然后取其长度。例如:

while (std::to_string(numberArray[i]).length() > MAX_INPUT)

这使用std::to_string函数,该函数用于将非字符串POD类型转换为std::string类。

但是假设您还需要处理负整数。由于前导减号将被计为长度的一部分(除非你想要),否则上述情况不会起作用。另一种方法是使用循环和除法来查找整数的长度并将此循环放在函数中,如下所示:

std::size_t numDigits(long long int n)
{
    std::size_t length = 0;

    do
    {
        ++length; 
        n /= 10;
    } while (n);

    return length;
}

然后在你的循环中:

while (numDigits(numberArray[i]) > MAX_INPUT)

根据您的目标,您可以选择其中一种方法。

答案 1 :(得分:2)

你需要推出自己的函数:数字的长度是任意的,因为它假设一个基数,并且需要对非正数的处理做出假设。作为起点,请考虑

unsigned length(unsigned long long n, unsigned radix = 10)
{
    unsigned l;
    for (l = 0; n; n /= radix, ++l);
    return l;
}

你可以把它扩展为负数(如果他们将长度增加一个?)以适合个人品味。

请注意0代码为0:这是我对0长度的看法,但不是每个人都有{39}品味。

答案 2 :(得分:0)

为了完整起见,另一种方法可能是使用一种查找表,如下所示:

unsigned num_digits(long long x)  
{  
    x = std::abs(x);      
    if(x < 10)
       return 1;
    else if(x < 100)
       return 2;
    else if(x < 1000)
       return 3;
    //keep going ....
}