在Java中,我使用
int length = String.valueOf(input).length();
找到整数的长度。
我的问题是:在C ++中有没有类似的方法? 我已经尝试过for循环和while循环,例如:
while (input > 0){
input/=10;
count++;
因此,除了循环之外,C ++中还有其他任何可用的东西。谢谢你的回答。
答案 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);