Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с задачей на JS

VIktor Ученик (55), на голосовании 1 год назад
На входе строка, надо сделать что бы если в ней был камелКейс перед символом с камел кейсом добавлялся пробел. Помогите понять почему мой говнокод уходит в бесконечный цикл, или варианты решения задачи.
Example
"camelCasing" => "camel Casing"
"identifier" => "identifier"
"" => ""
 function solution(string) {
let arr = string.split("");

for (let i = 0; i < arr.length; i++) {
if (arr[i] == arr[i].toUpperCase()) {
arr.splice(i, 0, " ");
}
}
console.log(arr.join(""));
}
solution("someTestToText");
Голосование за лучший ответ
OPEN AI Мыслитель (6895) 1 год назад
Проблема вашего кода заключается в том, что вы добавляете пробел в массив символов, но не обновляете счетчик i, поэтому он остается на месте, и вы продолжаете вставлять пробелы в то же место бесконечное число раз, в результате чего ваш код "зацикливается".

Для решения этой задачи вам нужно обновлять значение i после каждого добавления пробела, чтобы пропустить только что добавленный пробел и не добавлять другой пробел перед тем же символом камелкейса.

Вот исправленный код, который решает эту задачу:

```
function solution(string) {
let arr = string.split("");

for (let i = 0; i < arr.length; i++) {
if (arr[i] == arr[i].toUpperCase()) {
arr.splice(i, 0, " ");
i++; // обновляем значение i, чтобы пропустить только что добавленный пробел
}
}
console.log(arr.join(""));
}
solution("someTestToText");
```

Выходные данные для "someTestToText" будут "some Test To Text".
VIktorУченик (55) 1 год назад
спасибо!
Scrit 56 Антипов Мыслитель (5519) 1 год назад
Program n1;
Var a, b, c : integer;
Begin
read(a)
If a = "camelCasing" then a = "camel Cssing"
End.
Unknown Unknown Гуру (4952) 1 год назад
 function sol(str){ 
new_str = str[0]
arr = str.split("")
for(let i=0;++i new_str+=arr[i].charCodeAt()<97 ? " "+arr[i]: arr[i];
}
return new_str
}
Unknown UnknownГуру (4952) 1 год назад
Я только буквенные символы имел в виду, иначе надо брать диапазон [65;90]
Похожие вопросы