Compruebe si la entrada es un número entero en C++

Jinku Hu 12 octubre 2023
  1. Utilice el algoritmo std::find_if para comprobar si la entrada es un número entero en C++
  2. Use la función std::string::find_first_not_of para verificar si la entrada es entera en C++
  3. Use la función std::string::find_first_not_of para verificar si la entrada es entera en C++
Compruebe si la entrada es un número entero 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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Artículo relacionado - C++ Integer