Данные, введённые людьми, часто бывают неаккуратными. Вам дан список строк, и нужно сложить те из них, которые являются целыми числами, игнорируя остальные вместо аварийного завершения.
Элемент считается подходящим, если после удаления пробелов с обеих сторон он состоит из необязательного знака + или -, за которым идёт одна или больше цифр. Всё остальное (пустой текст, десятичные дроби вроде "2.5", слова) пропускается.
Реализуйте sum_valid_numbers(values).
Ввод
values: Элементы для чтения.
Вывод
Верните сумму допустимых целых чисел (0, если таких нет).
Ограничения
0 ≤ число записей ≤ 1,000
В каждой записи не больше 20 символов; корректные числа помещаются в 64-битное целое
Примеры
Ввод:
values = ["10", " 5 ", "abc", "-3"]
Ожидаемый вывод:
expected = 12
Ввод:
std::vector<std::string> values = {"10", " 5 ", "abc", "-3"};
Ожидаемый вывод:
long long expected = 12;
Ввод:
string[] values = new string[] {"10", " 5 ", "abc", "-3"};
Ожидаемый вывод:
long expected = 12;
Пояснение
"10", " 5 " (пробелы обрезаются) и "-3" являются целыми числами; "abc" пропускается. 10 + 5 - 3 = 12.
Ввод:
values = ["2.5", "", "seven"]
Ожидаемый вывод:
expected = 0
Ввод:
std::vector<std::string> values = {"2.5", "", "seven"};
Ожидаемый вывод:
long long expected = 0;
Ввод:
string[] values = new string[] {"2.5", "", "seven"};
Ожидаемый вывод:
long expected = 0;
Пояснение
Ни один из элементов не является целым числом, поэтому сумма равна 0.
Как подступиться
Сначала попробуйте сами, затем открывайте подсказки по одной.
Подсказка 1
Сначала уберите пробелы, затем решите, является ли остаток корректным целым числом.
Подсказка 2
Преобразование внутри try/except (или проверка символов) позволяет пропускать плохие записи без остановки.
Подсказка 3
Одинокий знак вроде "+" — не число.
Ожидаемая сложность
время O(общая длина), доп. память O(1)
Ссылки
Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.