Ajuda com Strings

1. Ajuda com Strings

Felipe RR
Phodalao

(usa Outra)

Enviado em 01/06/2018 - 22:00h

Galera estou com um problema!!

Tenho a seguinte string: 12345678, imaginem que foi o usuário que digitou e eu a li com um "gets".

Porém, e se o usuário digitasse, ao invés de números, letras? por exemplo: ROBERTO. Eu queria saber se o que foi digitado foram número ou letras, levando em conta que todas as letras serão maiúsculas, mas não estou conseguindo fazer essa verificação.
Já tentei fazer assim: if(string >= 'A' && string <= 'Z') mas não deu certo!!

Obrigado.


  


2. Re: Ajuda com Strings

Fernando
phoemur

(usa Debian)

Enviado em 01/06/2018 - 22:32h

Vou te apresentar o método do preguiçoso pra fazer isso.

#include <iostream>
#include <string>

using namespace std;

int main()
{
cout << "Entrada: ";
string input;
getline(cin, input);

try {
double num = stod(input);
cout << num << " é um número\n";
}
catch (std::invalid_argument&) {
cout << input << " não é número\n";
}


return 0;
}


Basicamente a função std::stod vai tentar converter a string em um número double. Se ela conseguir beleza, você tem o seu número.
Se ela falhar ela vai emitir uma exceção std::invalid_argument.
É só você capturar a exceção em um bloco catch(...) e ver que não é número.

Contudo existem algumas críticas a esse método. Particularmente ao uso de exceções para uma coisa que não é propriamente um erro e o custo que isso tem para o programa...
Porém a alternativa seria verificar caractere por caractere, e como os preguiçosos não gostam disso fica aqui minha sugestão ;-)

Edit.: Outra coisa. Esquece esse negócio de gets PELO AMOR DE DEUS!!!
https://stackoverflow.com/questions/1694036/why-is-the-gets-function-so-dangerous-that-it-should-not...

Edit2: Não se esqueça que não é tão simples como verificar apenas a existência dos caracteres 0123456789
Considere que:
1e+23
0x123
0xa+2.0
1234567890ull

Tudo isso são números válidos em C++


3. Re: Ajuda com Strings

Felipe RR
Phodalao

(usa Outra)

Enviado em 01/06/2018 - 22:46h

Obrigado pela resposta.
Assim é em C++ né? eu precisava saber em C, esse é o problema.


4. Re: Ajuda com Strings

Fernando
phoemur

(usa Debian)

Enviado em 01/06/2018 - 22:58h

Em C (porém praticamente o mesmo raciocínio da versão anterior)


#include <stdio.h>
#include <stdlib.h>


int main(void)
{
printf("Entrada: \n");
char input[256];
fgets(input, 256, stdin);

char *endptr = NULL;
long number = strtol(input, &endptr, 10);

if (input == endptr) {
printf("Não é um número\n");
}
else {
printf("É um número\n");
}

return 0;
}



5. Re: Ajuda com Strings

Felipe RR
Phodalao

(usa Outra)

Enviado em 01/06/2018 - 23:16h

Funcionou amigo, muito obrigado.

strtol(input, &endptr, 10); 


O 10 representa o que nesta linha? são os números de 0 a 9? Não conhecia essa função...


6. Re: Ajuda com Strings

Fernando
phoemur

(usa Debian)

Enviado em 01/06/2018 - 23:39h

O 10 representa a base do numero. 10 significa que é numero decimal, 2 binário, 16 hexadecimal, e assim por diante...






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts