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