Задача в том, чтобы написать функцию, входным параметром которой является строка. Функция должна осуществлять действие, противоположное процедуре сжатия: если в исходной строке встречается подпоследовательность вида x(k), где x – символ, а k – строка, являющаяся записью числа i, то ее необходимо заменить на подпоследовательность, состоящую из i вхождений символа x. Также решить без использования строковых функций
Например: строка 1,2(3),3(2) должна принять вид 1,2,2,2,3,3
Прилагаю то, что готово на данный момент (работает только с единичными числами, и не удаляет количество вхождений символа x, то есть при строке 1,2(3),3(2) выведет 1,2223,332)
Подскажите, пожалуйста, как можно исправить и насколько правильные наработки на данный момент?
let str = prompt("Введите строку");
let result = "";
function k(str) {
for (let i = 0; i < str.length; i++) {
if (str[i] == "(") {
let n = str[i + 1];
for (let j = 0; j < n - 1; j++) {
result += str[i - 1];
}
continue;
}
if (str[i] == ")")
continue;
result += str[i];
}
return result;
}
alert(k(str));
var s = "0(2),1,2(3),3(2),12(10)"
console.log(s.replace(/\b(\d+)\((\d+)\)/g, (m,x,n) => Array(+n).fill(x)))
мне кажется, что здесь зря используется обращение по индексу назад (строка 9 в коде), ведь мы не знаем, какой длины число было до; лучше, если нельзя использовать встроенный метод split(","), либо написать свой, либо идти по строке и, пока не встретим запятую или "(", собирать текущее число. если первый встреченный символ был "," - просто добавляем число в вывод и идем дальше, если "(" - считываем число повторений (до символа ")") и столько раз добавляем текущее число к result (не забывая запятые, если число не последнее)
function solve(s) {
var res = [], cur = { val: 0, count: 1 }, type = 'val';
for (var c of s + ",") {
switch (c) {
case ",":
for (var q=0; q<cur.count; ++q) res.push(cur.val);
type = 'val';
cur.val = 0;
cur.count = 1;
break;
case "(":
type = 'count';
cur.count = 0;
break;
case ")":
break;
default: // digit
cur[type] *= 10;
cur[type] += +c;
}
}
return res.join(",");
}
console.log(solve("0(2),1,2(3),3(2),12(10)"));
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня есть реакт проект
появилась нужда сделать данную вещь, подскажите, с чего начать и как лучше сделать подобное?