Voltar para os desafios
Fácil 0 resolvidos 0% de aceitação

Somar os números válidos

Some as entradas que são números inteiros e ignore todo o resto, do jeito que try/except lida com entrada inválida.

O que você vai aprender

  • Pular entradas inválidas em vez de quebrar
  • Remover espaços antes de converter texto em número
  • Reconhecer um sinal opcional seguido de dígitos

Problema

Ver original (inglês)

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

Exemplo 1
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.

Exemplo 2
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.

Aprenda com outros

Soluções da comunidade

Ainda não há soluções publicadas. Resolva este desafio para compartilhar a primeira.