Compruebe si la entrada es un número entero en C++
-
Utilice el algoritmo
std::find_if
para comprobar si la entrada es un número entero en C++ -
Use la función
std::string::find_first_not_of
para verificar si la entrada es entera en C++ -
Use la función
std::string::find_first_not_of
para verificar si la entrada es entera en C++
Este artículo demostrará varios métodos sobre cómo verificar si la entrada es un número entero en C++.
Utilice el algoritmo std::find_if
para comprobar si la entrada es un número entero en C++
std::find_if
es parte de la biblioteca de algoritmos STL definida en el archivo de encabezado <alogrithm>
, y se puede utilizar para buscar el elemento específico en el rango. Dado que lo más probable es que la entrada del usuario sea una cadena, asumiremos que los datos de entrada se almacenan en un objeto std::string
. Tenga en cuenta que implementamos una función llamada isNumber
que toma una referencia a std::string
y devuelve el valor bool
.
El prototipo de la función std::find_if
que usamos en el siguiente ejemplo toma tres argumentos, los dos primeros de los cuales especifican los elementos del rango - [first, last]
. El tercer argumento es un predicado unario, que es una función lambda que devuelve el valor bool
al evaluar el valor invertido de la función isdigit
. En la capa exterior, el valor de retorno std::find_if
se compara con el str.end()
, ya que el valor true
de la expresión indica que no se encontró ningún carácter que no sea un dígito; por eso es el número. Además, lógicamente Y la expresión anterior con !str.empty
para indicar que la cadena está vacía y devolver false
.
#include <algorithm>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
bool isNumber(const string& str) {
return !str.empty() &&
std::find_if(str.begin(), str.end(), [](unsigned char c) {
return !std::isdigit(c);
}) == str.end();
}
int main() {
string str1 = "12345.";
string str2 = "12312";
string str3 = "123142.2";
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";
exit(EXIT_SUCCESS);
}
Producción :
Not number
Number
Not number
Use la función std::string::find_first_not_of
para verificar si la entrada es entera en C++
Alternativamente, podemos reimplementar la función isNumber
usando el método find_first_not_of
que está incorporado para el objeto std::string
. find_first_not_of
puede tomar el valor de la cadena y encontrar el primer carácter que no sea igual a ninguno de los caracteres en la secuencia de la cadena. Si la función no encuentra dicho carácter, se devuelve string::npos
. Por lo tanto, especificamos los diez dígitos decimales como argumento find_first_not_of
y verificamos su igualdad con npos
, ya que la función devuelve el valor de la expresión.
#include <algorithm>
#include <iostream>
#include <string>
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 = "12345.";
string str2 = "12312";
string str3 = "123142.2";
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";
exit(EXIT_SUCCESS);
}
Producción :
Not number
Number
Not number
Use la función std::string::find_first_not_of
para verificar si la entrada es entera en C++
Sin embargo, tenga en cuenta que el método anterior no identifica los números reales y los trata como ilegítimos. Entonces, podemos agregar el .
carácter a la cadena y permitir que la función reconozca cualquier secuencia de dígitos con un símbolo de punto como un número válido. Necesitamos eliminar dos casos en los que el .
carácter es el primer y el último símbolo en la secuencia de entrada, que por nuestra convención no sería un número real válido. Podemos usar los métodos integrados de string
front
y back
para verificar que la entrada no comience / termine con un símbolo de punto. Finalmente, lógicamente hacemos Y las tres expresiones entre sí y devolvemos ese valor.
#include <algorithm>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
bool isNumber3(const string& str) {
return str.find_first_not_of(".0123456789") == string::npos &&
str.front() != '.' && str.back() != '.';
}
int main() {
string str1 = "12345.";
string str2 = "12312";
string str3 = "123142.2";
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";
exit(EXIT_SUCCESS);
}
Producción :
Not number
Number
Number
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