Contar o número de dígitos em um número em C++

Jinku Hu 12 outubro 2023
  1. Use as funções std::to_string e std::string::size para contar o número de dígitos em um número em C++
  2. Use os métodos std::string::erase e std::remove_if para contar para contar o número de dígitos em um número em C++
Contar o número de dígitos em um número em C++

Este artigo demonstrará vários métodos sobre como contar o número de dígitos em um número C++.

Use as funções std::to_string e std::string::size para contar o número de dígitos em um número em C++

A maneira mais direta de contar o número de dígitos em um número é convertê-lo no objeto std::string e então chamar uma função interna de std::string para recuperar um número de contagem. Nesse caso, implementamos uma função de modelo separada countDigits que recebe um único argumento, que é assumido como um tipo inteiro e retorna o tamanho como um inteiro. Observe que o exemplo a seguir produz números incorretos para inteiros negativos, pois também conta o símbolo de sinal.

#include <iostream>
#include <string>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::to_string;

template <typename T>
size_t countDigits(T n) {
  string tmp;

  tmp = to_string(n);
  return tmp.size();
}

int main() {
  int num1 = 1234567;
  int num2 = -1234567;

  cout << "number of digits in " << num1 << " = " << countDigits(num1) << endl;
  cout << "number of digits in " << num2 << " = " << countDigits(num2) << endl;

  exit(EXIT_SUCCESS);
}

Resultado:

number of digits in 1234567 = 7
number of digits in -1234567 = 8

Para remediar a falha na implementação anterior da função countDigits, adicionaremos uma única instrução if para avaliar se o número fornecido é negativo e retornar o tamanho da string que é um a menos. Observe que se o número for maior que 0, o valor original do tamanho da string é retornado, conforme implementado no código de exemplo a seguir.

#include <iostream>
#include <string>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::to_string;

template <typename T>
size_t countDigits(T n) {
  string tmp;

  tmp = to_string(n);
  if (n < 0) return tmp.size() - 1;
  return tmp.size();
}

int main() {
  int num1 = 1234567;
  int num2 = -1234567;

  cout << "number of digits in " << num1 << " = " << countDigits(num1) << endl;
  cout << "number of digits in " << num2 << " = " << countDigits(num2) << endl;

  exit(EXIT_SUCCESS);
}

Resultado:

number of digits in 1234567 = 7
number of digits in -1234567 = 7

Use os métodos std::string::erase e std::remove_if para contar para contar o número de dígitos em um número em C++

O exemplo anterior fornece uma solução totalmente suficiente para o problema acima, mas pode-se modificar a engenharia de countDigits usando a combinação de funções std::string::erase e std::remove_if para remover quaisquer símbolos não numéricos . Observe também que esse método pode ser o ponto de partida para implementar uma função que pode funcionar com valores de ponto flutuante. Lembre-se, porém, de que o código de exemplo a seguir não é compatível com valores de ponto flutuante.

#include <iostream>
#include <string>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::to_string;

template <typename T>
size_t countDigits(T n) {
  string tmp;

  tmp = to_string(n);
  tmp.erase(std::remove_if(tmp.begin(), tmp.end(), ispunct), tmp.end());
  return tmp.size();
}

int main() {
  int num1 = 1234567;
  int num2 = -1234567;

  cout << "number of digits in " << num1 << " = " << countDigits(num1) << endl;
  cout << "number of digits in " << num2 << " = " << countDigits(num2) << endl;

  exit(EXIT_SUCCESS);
}

Resultado:

number of digits in 1234567 = 7
number of digits in -1234567 = 7
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C++ Integer