Contar o número de dígitos em um número em C++
- 
          
            Use as funções std::to_stringestd::string::sizepara contar o número de dígitos em um número em C++
- 
          
            Use os métodos std::string::eraseestd::remove_ifpara contar para 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
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