Cómo determinar si una cadena es un número en C++
-
Utilice el método
std::isdigit
para determinar si una cadena es un número -
Usa
std::isdigit
constd::ranges::all_of
para determinar si una cadena es un número -
Utiliza el método
find_first_not_of
para determinar si una cadena es un número
Este artículo explica cómo averiguar si una cadena de C++ dada es un número. Antes de entrar en materia, hay que tener en cuenta que los siguientes métodos sólo son compatibles con cadenas de caracteres de un solo byte y números integrales decimales.
Utilice el método std::isdigit
para determinar si una cadena es un número
La primera versión es probablemente la forma más obvia de implementar la solución. Es decir, pasar una cadena como parámetro a una función isNumber
, que itera sobre cada uno de los char
de la string
y comprueba con el método isdigit
. Cuando encuentra el primer no-número la función devuelve false, si no se encuentra ninguno devuelve true.
#include <iostream>
using std::cin;
using std::cout;
using std::endl using std::string;
bool isNumber(const string& str) {
for (char const& c : str) {
if (std::isdigit(c) == 0) return false;
}
return true;
}
int main() {
string str1 = "231524randstr23";
string str2 = "23152423";
string str3 = "a3152423";
isNumber(str1) ? cout << "Number\n" : cout << "Not number\n";
isNumber(str2) ? cout << "Number\n" : cout << "Not number\n";
isNumber(str3) ? cout << "Number\n" : cout << "Not number\n";
return EXIT_SUCCESS;
}
Resultado:
Not number Number Not number
Fíjese que emitimos el veredicto sobre cada string
mediante el operador condicional ternario ? :
, que es una variante concisa de if-else
.
Usa std::isdigit
con std::ranges::all_of
para determinar si una cadena es un número
El método anterior era bastante básico para el poderoso C++, así que implementemos una solución más elocuente usando el método de C++20 std::ranges::all_of
y algunas expresiones lambda. En nuestro caso range::all_of
comprueba si la lambda especificada devuelve true
para cada elemento del rango dado s.begin(), s.end()
y devuelve true si se cumple la condición.
#include <algorithm>
#include <iostream>
using std::cin;
using std::cout;
using std::endl using std::string;
bool isNumber(const string& s) {
return std::ranges::all_of(s.begin(), s.end(),
[](char c) { return isdigit(c) != 0; });
}
int main() {
string str1 = "231524randstr23";
string str2 = "23152423";
string str3 = "a3152423";
isNumber(str1) ? cout << "Number\n" : cout << "Not number\n";
isNumber(str2) ? cout << "Number\n" : cout << "Not number\n";
isNumber(str3) ? cout << "Number\n" : cout << "Not number\n";
return EXIT_SUCCESS;
}
Utiliza el método find_first_not_of
para determinar si una cadena es un número
Esta versión utiliza un algoritmo de búsqueda incorporado de string
. El algoritmo busca el primer carácter igual a ninguno de los caracteres de string
pasados como argumento (en nuestro caso - "0123456789"
). Si el carácter no se encuentra cadena::npos se devuelve, por lo que devolvemos el resultado de la comparación de isNumber
.
#include <iostream>
using std::cin;
using std::cout;
using std::endl using std::string;
bool isNumber(const string& str) {
return str.find_first_not_of("0123456789") == string::npos;
}
int main() {
string str1 = "231524randstr23";
string str2 = "23152423";
string str3 = "a3152423";
isNumber(str1) ? cout << "Number\n" : cout << "Not number\n";
isNumber(str2) ? cout << "Number\n" : cout << "Not number\n";
isNumber(str3) ? cout << "Number\n" : cout << "Not number\n";
return EXIT_SUCCESS;
}
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 FacebookArtículo relacionado - C++ String
- Encuentre el primer carácter repetido en una cadena en C++
- Encuentre la subcadena común más larga en C++
- Poner en mayúscula la primera letra de una cadena en C++
- Comparación de cadenas y caracteres en C++
- Eliminar el último carácter de una cadena en C++
- Obtener el último carácter de una cadena en C++