Contar el número de dígitos en un número en C++
-
Utilice las funciones
std::to_string
ystd::string::size
para contar el número de dígitos en un número en C++ -
Utilice los métodos
std::string::erase
ystd::remove_if
para contar para contar el número de dígitos en un número en C++
Este artículo demostrará varios métodos sobre cómo contar el número de dígitos en un número C++.
Utilice las funciones std::to_string
y std::string::size
para contar el número de dígitos en un número en C++
La forma más sencilla de contar el número de dígitos en un número es convertirlo en el objeto std::string
y luego llamar a una función incorporada de std::string
para recuperar un número de conteo. En este caso, implementamos una función de plantilla separada countDigits
que toma un solo argumento, que se supone que es un tipo entero y devuelve el tamaño como un entero. Tenga en cuenta que el siguiente ejemplo genera números incorrectos para enteros negativos, ya que también cuenta el símbolo de signo.
#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);
}
Producción :
number of digits in 1234567 = 7
number of digits in -1234567 = 8
Para remediar la falla en la implementación previa de la función countDigits
, agregaremos una sola instrucción if
para evaluar si el número dado es negativo y devolver el tamaño de cadena que es uno menos. Observe que si el número es mayor que 0
, se devuelve el valor original del tamaño de la cadena, como se implementa en el siguiente código de ejemplo.
#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);
}
Producción :
number of digits in 1234567 = 7
number of digits in -1234567 = 7
Utilice los métodos std::string::erase
y std::remove_if
para contar para contar el número de dígitos en un número en C++
El ejemplo anterior proporciona una solución totalmente suficiente para el problema anterior, pero uno puede sobre-diseñar los countDigits
usando la combinación de funciones std::string::erase
y std::remove_if
para eliminar cualquier símbolo que no sea un número. . Tenga en cuenta también que este método puede ser el trampolín para implementar una función que pueda trabajar con valores de punto flotante. Sin embargo, tenga en cuenta que el siguiente código de muestra no es compatible con valores de punto flotante.
#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);
}
Producción :
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