3 Formas de verificar se uma string tem somente números em C++

Na verdade, há diversas formas, no entanto, essas são as mais indicadas e/ou utilizadas.


3 Formas de verificar se uma string tem somente números em C++


Há diversas tarefas corriqueiras no C++ que “vira e mexe” acabamos nos esquecendo. Logo, é interessante sempre retornamos ao básico para treinarmos e fixarmos o conhecimento.

Esse tipo de verificação pode ser utilizado em inúmeras situações e existem mais de 3 formas de verificarmos se uma string tem ou não somente números.

Nesse artigo vamos ver as formas mais simples e geralmente as mais utilizadas!


1. A forma ‘Like a BOSS!’

A forma que geralmente eu mais utilizo e recomendo é utilizando a função std::all_of do cabeçalho: <algorithm> em conjunto com lambda.

Costumo chamar de forma: Like a BOSS! 😃 , por ser mais moderna e mais veloz, principalmente em tempo de compilação.

O código se resume em:

#include <iostream>
#include <algorithm>

int main(){
  bool number {false};
  std::string s {"a123456"};
  if(!s.empty() && std::all_of(s.begin(), s.end(), [](char c){
    return ::isdigit(c);
  })){
   number = true;
  }
  std::cout << ( number 
      ? "Somente números! =)" 
      : "Não há somente números :(") << '\n'; 
  return 0;
}

Note que a std::string s possui uma letra, logo, a saída será: Não há somente números :( , mas se alterarmos e recompilarmos o resultado será outro.


Utilizando RegEx

Algumas acham que RegEx já é muito “apelão”, no entanto, ela é uma forma padronizada que serve para qualquer linguagem de programação e também é funcional.

O lado ruim de usar RegEx em C++, é o tempo de compilação, que aumenta significativamente. Em resumo o código seria:

#include <iostream>
#include <regex>

int main(){
  const std::string s {"123456+"};
  std::regex re("^[0-9]+$");
  std::smatch match;
  std::cout << ( std::regex_search(s, match, re) ? 
      "Somente números! =)" : 
      "Não há somente números :(") << '\n'; 
  return 0;
}

Nesse caso a string s tem um caractere que não é número: + ao final.


O mais básico possível!

Algumas pessoas preferem o C++ Ortodoxo, ou seja, aquele mais antigo e o mais parecido possível com o C.

Então, esse código basicão, seria:

#include <iostream>
#include <string.h>

int main(){
  const std::string s {"123456"};
  bool number {true};
  for (std::size_t i {}; i < s.length(); ++i) {
   if( !::isdigit(s[i])){
     number = false;
   } 
  }
  std::cout << ( number 
      ? "Somente números! =)" 
      : "Não há somente números :(") << '\n'; 
  return 0;
}

Melzinho na chupeta, né não?! 😛

Veja também:

12 Cursos na Udemy Gratuitos e com Cupons com até 80% de Desconto

Há 5 Cursos de C++ na promoção!!! 😎

Compartilhe esse artigo e até a próxima! \o/


cpp


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!