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