Problema
Dados digitados por pessoas são bagunçados. Você recebe uma lista de strings e deve somar as que são números inteiros, ignorando o resto em vez de travar.
Uma entrada conta se, depois de remover espaços nas duas extremidades, ela for um sinal opcional + ou - seguido de um ou mais dígitos. Qualquer outra coisa (texto vazio, decimais como "2.5", palavras) é ignorada.
Implemente sum_valid_numbers(values).
Input
values: As entradas a serem lidas.
Output
Retorne a soma dos números inteiros válidos (0 se não houver nenhum).
Restrições
0 ≤ número de entradas ≤ 1,000
Cada entrada tem no máximo 20 caracteres; números válidos cabem em um inteiro de 64 bits
Exemplos
Entrada:
values = ["10", " 5 ", "abc", "-3"]
Saída esperada:
expected = 12
Entrada:
std::vector<std::string> values = {"10", " 5 ", "abc", "-3"};
Saída esperada:
long long expected = 12;
Entrada:
string[] values = new string[] {"10", " 5 ", "abc", "-3"};
Saída esperada:
long expected = 12;
Explicação
"10", " 5 " (os espaços são removidos) e "-3" são números inteiros; "abc" é ignorado. 10 + 5 - 3 = 12.
Entrada:
values = ["2.5", "", "seven"]
Saída esperada:
expected = 0
Entrada:
std::vector<std::string> values = {"2.5", "", "seven"};
Saída esperada:
long long expected = 0;
Entrada:
string[] values = new string[] {"2.5", "", "seven"};
Saída esperada:
long expected = 0;
Explicação
Nenhuma das entradas é um número inteiro, então a soma é 0.
Como abordar
Tente sozinho primeiro e depois abra uma dica de cada vez.
Dica 1
Remova os espaços primeiro e depois decida se o que sobrou é um inteiro válido.
Dica 2
Converter dentro de try/except (ou verificar os caracteres) permite pular entradas ruins sem parar.
Dica 3
Um sinal sozinho como "+" não é um número.
Complexidade esperada
tempo O(comprimento total), espaço extra O(1)
Referências
Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.