C++相当于Python len()函数?

rec*_*gle 6 c++

我有一个整数,需要找出它中有多少位数.

Jos*_*shD 10

对于正数,请使用log10:

int a = 1234;
int len = static_cast<int>(log10(a)+1.);
Run Code Online (Sandbox Code Playgroud)

如果你需要彻底:

int length(int a)
{
  int b = abs(a);
  if (b == 0) return 1;
  return static_cast<int>(log10(b)+1.);
}
Run Code Online (Sandbox Code Playgroud)

话虽如此,在实践中重复除以10将是更好的选择.

int length(int a)
{
  int b = 0;
  for (a = abs(a); a != 0; b++, a /= 10) continue;
  return b;
}
Run Code Online (Sandbox Code Playgroud)

  • Josh,你真的需要应用一个上限函数,因为整数转换截断 - 我已经冒昧地编辑你的非常好的答案. (2认同)

Pet*_*McG 7

你可能意味着你有一个字符串包含数字而不是python中的int:

>>> i = 123456789
>>> len(i)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: object of type 'int' has no len()
>>> len(str(i))
9
Run Code Online (Sandbox Code Playgroud)

如果在c ++中也是这种情况,使用以下方法很容易找到字符串的长度:

my_str_value.length()
Run Code Online (Sandbox Code Playgroud)

或者使用C字符串 strlen


Pra*_*rav 6

C++库中没有这样的功能.但是,您可以使用std::stringstream简单.

试试这个(处理负数也是如此).

   int a =-12345,x;
   x = std::abs(a)
   std::stringstream s;
   s << x;
   std::cout<<s.str().size();
Run Code Online (Sandbox Code Playgroud)


Sin*_*ion 5

嗯... Python:

>>> len(5)

Traceback (most recent call last):
  File "<pyshell#45>", line 1, in <module>
    len(5)
TypeError: object of type 'int' has no len()
Run Code Online (Sandbox Code Playgroud)

不是你想要的?

好吧,假设你有一个实际的整数.日志基地10会告诉你想知道的数字是什么,那就是如果yournumber == pow(10, digits),那么log10(yournumber) == digits!不幸的是,如果你的数字不是10的精确幂,你将有一小部分要处理.但是,这很容易处理floor(),只是向下舍入的功能.警惕负数,因为非正值的实数中的对数未定义.

#include <iostream>
#include <math.h>

int main()
{
  std::cout << floor(log10(5))+1 << std::endl;
  std::cout << floor(log10(30))+1 << std::endl;
  std::cout << floor(log10(2000))+1 << std::endl;
  std::cout << floor(log10(16000))+1 << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我们必须加1,因为10到1'仍然是10,所以我们一个接一个.添加一个到指数,你有数字!


soc*_*pet 4

处理负数和输入为零的情况有点棘手:

int length(int n)
{
   int len = 0;
   if (n < 0) { len = 1; n = -n; }
   while (n > 9) {
        n /= 10;
        len++;
   }
   return len+1;
}
Run Code Online (Sandbox Code Playgroud)