在C ++

时间:2015-11-03 06:10:16

标签: c++

在Java中,我使用

int length = String.valueOf(input).length();

找到整数的长度。

我的问题是:在C ++中有没有类似的方法? 我已经尝试过for循环和while循环,例如:

while (input > 0){
    input/=10;
    count++;

因此,除了循环之外,C ++中还有其他任何可用的东西。谢谢你的回答。

5 个答案:

答案 0 :(得分:6)

如果您想要用Java编写的内容完全对应,可以使用:

int length = to_string(input).length();

请注意to_string是C ++ 11的一项功能。另外,请注意负数。

答案 1 :(得分:3)

通过使用数字的对数,可以计算位数,而无需首先转换为字符串:

std::size_t intlen(int i) {
    if (i == 0) return 1;
    else if (i < 0) return 2 + static_cast<std::size_t>(std::log10(-i));
    else if (i > 0) return 1 + static_cast<std::size_t>(std::log10(i));
}

logartihm仅针对正数定义,因此必须单独处理负数和零,将-符号计为附加字符。将log10替换为log2以获取二进制数字的数量(这对于任何基数都是可能的)。

但是请注意,首先转换为字符串(例如,使用std::to_string)是一个依赖于语言环境的操作,因此可以为不同的语言设置产生不同的结果 - 某些语言环境插入千位分隔符(例如100,000 )使用上述公式不会出现。

答案 2 :(得分:2)

  

unsigned int number_of_digits = 0;

     

做{           ++ number_of_digits;           n / = base; } while(n);

     

// n是您的基数。

答案 3 :(得分:2)

除了循环之外还有递归。例如,对于正整数,您可以这样做:

mListener = new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

             mCheckBoxChoice1.setChecked(isChecked);

        }
    };

mCheckBoxAll.setOnCheckedChangeListener(mListener);

mCheckBoxChoice1.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
             if (!isChecked){
                 mCheckBoxAll.setOnCheckedChangeListener(null);
                 mCheckBoxAll.setChecked(!isChecked);
                 mCheckBoxAll.setOnCheckedChangeListener(mListener)
               } 
        }
    });

mCheckBoxChoice2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (!isChecked){
                 mCheckBoxAll.setOnCheckedChangeListener(null);
                 mCheckBoxAll.setChecked(!isChecked);
                 mCheckBoxAll.setOnCheckedChangeListener(mListener)
               } 
        }
    });

答案 4 :(得分:1)

谈到预C ++ 11,您可以使用相同的方法,但使用sprintf

将整数转换为char数组,然后获取其长度:

char buffer[30];

int length = sprintf(buffer, "%d", input);

这是working IDEOne example