Como determinar se uma string é um número em C++

Jinku Hu 12 outubro 2023
  1. Utilize std::isdigit Método para determinar se uma string é um número
  2. Utilize std::isdigit com std::ranges::all_of para determinar se uma string é um número
  3. Utilize find_first_not_of Método para determinar se uma string é um número
Como determinar se uma string é um número em C++

Este artigo explica como descobrir se uma determinada string C++ é um número. Antes de nos aprofundarmos, deve-se observar que os seguintes métodos são apenas compatíveis com strings de byte único e números integrais decimais.

Utilize std::isdigit Método para determinar se uma string é um número

A primeira versão é provavelmente a maneira mais óbvia de implementar a solução. Nomeadamente, passe uma string como parâmetro para uma função éNúmero, que itera sobre cada char no string e verifica com o método isdigit. Quando encontra o primeiro não-número, a função retorna falso, se nenhum é encontrado retorna verdadeiro.

#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

Observe que emitimos o veredicto sobre cada string via ? : operador condicional ternário, que é uma variante concisa de if-else.

Utilize std::isdigit com std::ranges::all_of para determinar se uma string é um número

O método anterior era bastante básico para o poderoso C++, então vamos implementar uma solução mais eloqüente utilizando o método C++20 std::ranges::all_of e algumas expressões lambda. Em nosso caso ranges::all_of verifica se o lambda especificado retorna verdadeiro para cada elemento do intervalo dado s.begin(), s.end() e retorna verdadeiro se a condição for satisfeita.

#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;
}

Utilize find_first_not_of Método para determinar se uma string é um número

Esta versão utiliza um algoritmo de busca string embutido. O algoritmo busca o primeiro caractere igual a nenhum dos caracteres da string passado como argumento (no nosso caso - "0123456789"). Se o caractere não for encontrado string::npos é retornado, então retornamos o resultado da comparação do 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;
}
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

Artigo relacionado - C++ String