Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском.
Закрыт 1 год назад.
Задача
Напишите функцию countChar(str, char) : array, которая будет считать количество символов char в строке str и в каждом отдельном слове строки. Возвращаемое значение – массив, первый элемент которого кол-во символов в строке, а дальнейшие элементы – кол-во символов в каждом слове. Если в слове символа нет, то выводить 0. Пример, строка “Реализуйте функцию с применением рекурсии”, символ “и”, результат [6, 1, 1, 0, 2, 2]. Использовать стандартные методы для строк и массивов.
Как рекурсивно подсчитать количество нужных символов?
Нужно постараться, чтобы как-то искусственно ввести рекурию туда, где она не нужна)
Ну можно так, например (Если match нельзя, можно сделать через цикл и indexOf):
let str = "Реализуйте функцию с применением рекурсии";
console.log( countChar(str, 'и') );
function countChar(str, char, arr) {
let space = str.indexOf(" "); // Находит индекс первого пробела
// Или возвращает -1, если его нет.
let reg = new RegExp( char , "g" ); // См. "регулярные выражения".
arr = arr || [ (str.match(reg) || "").length ];
// Первым элементом сразу будет кол-во всех совпадений
if( space == -1 ){
arr.push( (str.match(reg) || "").length );
// Если match вернет null, получится ошибка "cannot read length of null"
// Добавлено ИЛИ || ""
// Если первое выражение будет null, возьмется второе. А его length == 0;
return arr;
}
arr.push( (str.slice(0, space).match(reg) || "").length );
return countChar(str.slice( space + 1 ), char, arr);
}
Можно так.
var count = countChar('Реализуйте функцию с применением рекурсии', 'и');
console.log(count);
function countChar(str, char){
// проверяем тип аргументов
if((typeof str !== 'string') || (typeof char !== 'string')){
return false;
}
var words = str.split(' '); // делим фразу на слова
// если одно слово то считаем кол-во нужных символов в нем и возвращаем результат
if(words.length === 1){
var count = 0;
var word = words[0];
var lastpos = 0;
while((lastpos = word.indexOf(char, lastpos)) !== -1){
lastpos++; // поиск следующего символа начинаем на позицию дальше после найденного
count++;
}
return count;
// если слов несколько передаем каждое слово в данную функцию и записываем результат в массив
} else if (words.length > 1) {
var countArr = [0];
words.forEach(function(word){
var count = countChar(word, char);
if(typeof count !== 'number') return;
countArr[0] += count;
countArr.push(count);
});
return countArr;
} else {
return false;
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть два input-а реализованные, как selectЕсли кликаем на первый блок, затем на второй, то первый должен закрываться У них одинаковые классы
вот пример метода, я хочу узнать что он вернёт, копию структуры или саму структуру и если он вернёт копию то как мне получить сам объект
Учусь взаимодействию C#(WinForms) с MySql, в интернете увидел пример кода для авторизации, который по сути переписал точь-в-точь: