HOWTO · C++
Contar o número de dígitos em um número em C++
Este artigo apresenta como contar o número de dígitos em um número C++
Nesta página
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