Дана строка, найти сумму всех чисел в ней
Привет, мне лабу дали, одно из заданий такое: Дан текст. Найти слова, состоящие из цифр, и сумму чисел, которые образуют эти слова.
я попробовал написать код, но он почему то выводит первое попавшееся число в строке и завершается. В чём косяк, поможете? var str = "Произвольный текст, содержащий цифры вроде 1, 2, 45 или 36"; function check(s){ var sum = 0; while ((str[s] >= '0') && (str[s]<='9')) { sum = sum*10 + +str[s]; s++; } return sum; } function index(f){ while ((str[f] >= '0') && (str[f]<='9')) f++; return f; } var summa = 0; var i = 0; do { if ((str[i] >= '0') && (str[i]<='9')){ summa = summa + check(i); i = i + index(i); } i++ } while (i < str.length); console.log(summa); |
var str = "Произвольный текст, содержащий цифры вроде 1, 2, 45 или 36"; alert(str.match(/\-?\d+/g).reduce((sum, el) => sum + +el, 0)) |
Цитата:
|
Цитата:
Логически код написан не связно. В функции check() вы передаете индекс строки, а саму строку "дергаете" из глобального контекста. То есть, обращаетесь к переменной со строкой находящейся вне функции. Это плохой пример. Функция не универсальна. В будущем когда будете писать в модулях (вы ведь node js изучаете?), такой код не подойдет. То же самое касается вашей функции index(f). Старайтесь всегда писать функции универсальные, без обращения к данным вне окружения функции. В самой функции check() есть логические ошибки. условие " str[s] >= '0' && (str[s]<='9') " не верное. Синтаксически ошибок нет, но вы сравниваете две строки на "больше" "меньше". В таком выражении например буква ''д" будет true при str[s] >= '0'. Сравнивать "больше" "меньше" нужно только числовые значения, если не ожидаете специфический результат получить. Таким образом "9" - строка, а не число. Проверить это можно "typeof str[s] " результат будет string а не number. Если вы еще не изучали регулярные выражения, то я бы решил задачу примерно так: const string = 'Произвольный текст, содержащий цифры вроде 1 2, 45 или 36' // разбиваем строку на массив, удалив запятые и пробелы из строки const stringArr = string.split(',').join(' ').split(' '); // переменная накопления суммы let summNumString=0 // перебираем полученный массив for (let i=0; i<stringArr.length; i++){ // если получается преобразовать в число то суммируем if (Number(stringArr[i])) summNumString+=Number(stringArr[i]); } // вывод результата в консоль console.log(summNumString) Регулярные выражения обязательно изучите. Кстати, мой код корректно отработает если в строке будет дробное число (например 1.2), а регулярка от destus поймет это как два разных числа)) :victory: |
Цитата:
var str = "Произвольный текст, содержащий цифры вроде 1, 2.2, 45 или 36"; alert(str.match(/\-?[\d\.]+/g).reduce((sum, el) => sum + +el, 0)); |
Часовой пояс GMT +3, время: 08:39. |