
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!
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 spossui uma letra, logo, a saída será: Não há somente números :( , mas se alterarmos e recompilarmos o resultado será outro.
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 stem um caractere que não é número:+ao final.
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?! 😛
Há 5 Cursos de C++ na promoção!!! 😎
Compartilhe esse artigo e até a próxima! \o/