Como determinar se uma string é um número em C++
-
Utilize
std::isdigit
Método para determinar se uma string é um número -
Utilize
std::isdigit
comstd::ranges::all_of
para determinar se uma string é um número -
Utilize
find_first_not_of
Método para determinar se uma string é um número
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;
}
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