Retour aux défis
Facile 0 résolus 0 % de réussite

Additionner les nombres valides

Additionnez les entrées qui sont des nombres entiers et ignorez tout le reste, comme le fait try/except face à une entrée invalide.

Ce que vous allez apprendre

  • Ignorer les entrées invalides au lieu de planter
  • Retirer les espaces avant de convertir un texte en nombre
  • Reconnaître un signe facultatif suivi de chiffres

Problème

Les données saisies par des personnes sont souvent désordonnées. Vous recevez une liste de chaînes et devez additionner celles qui sont des nombres entiers, en ignorant le reste au lieu de provoquer une erreur.

Une entrée compte si, après avoir retiré les espaces au début et à la fin, elle contient un signe + ou - facultatif suivi d'un ou plusieurs chiffres. Tout le reste (texte vide, décimaux comme "2.5", mots) est ignoré.

Implémentez sum_valid_numbers(values).

Input

values: Les entrées à lire.

Output

Retournez la somme des nombres entiers valides (0 s'il n'y en a aucun).

Contraintes

0 ≤ nombre d'entrées ≤ 1,000

Chaque entrée a au plus 20 caractères ; les nombres valides tiennent dans un entier 64 bits

Exemples

Exemple 1
Entrée :
values = ["10", " 5 ", "abc", "-3"]

Sortie attendue :
expected = 12
Entrée :
std::vector<std::string> values = {"10", " 5 ", "abc", "-3"};

Sortie attendue :
long long expected = 12;
Entrée :
string[] values = new string[] {"10", " 5 ", "abc", "-3"};

Sortie attendue :
long expected = 12;

Explication

"10", " 5 " (les espaces sont supprimés) et "-3" sont des nombres entiers ; "abc" est ignoré. 10 + 5 - 3 = 12.

Exemple 2
Entrée :
values = ["2.5", "", "seven"]

Sortie attendue :
expected = 0
Entrée :
std::vector<std::string> values = {"2.5", "", "seven"};

Sortie attendue :
long long expected = 0;
Entrée :
string[] values = new string[] {"2.5", "", "seven"};

Sortie attendue :
long expected = 0;

Explication

Aucune des entrées n'est un nombre entier, donc la somme est 0.

Comment l'aborder

Essayez d'abord seul, puis ouvrez les indices un par un.

Indice 1

Retirez d'abord les espaces, puis vérifiez si le reste est un entier valide.

Indice 2

Convertir dans un try/except (ou vérifier les caractères) permet d'ignorer les entrées invalides sans s'arrêter.

Indice 3

Un signe seul comme "+" n'est pas un nombre.

Complexité attendue

temps O(longueur totale), espace supplémentaire O(1)

Références

Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.