Перевернуть всю строку, оставив пробелы в одной позиции - PullRequest
0 голосов
/ 31 марта 2020

Это код, который я пробовал. Если мы введем «Мы фермеры!» он должен возвращать "! s rem raferaeW", однако код, который я получаю, возвращает "! s remr aferaeW"

function reverseStr(input){

  var array1 = [];  
  var array2 = [];
  var nWord;
  for (var i = 0; i < input.length; i++) {

    array1.push(input[i]);

  }

  var spaces = [];

    for (var i = 0; i < array1.length; i++) {
        if(array1[i] == " ") {
            spaces.push(i);
        }
    }

  console.log(array1);
  console.log(spaces);

  array2 = array1.slice().reverse();

  var spaces2 = [];

  for (var i = 0; i < array1.length; i++) {
        if(array2[i] == " ") {
            spaces2.push(i);
        }
    }

  console.log(spaces2);

  for (var i = spaces2.length - 1; i >=0; i--) {
      array2.splice(spaces2[i], 1);
  }

  console.log(array2);

  nWord = array2.join('');

  console.log(nWord);

  var array3 = [];

  for (var i = 0; i < nWord.length; i++) {
      array3.push(nWord[i]);
  }

  console.log(array3);

  for (var i = spaces.length - 1; i >=0; i = i - 1) {
      array3.splice(spaces[i], 0, " ");
  }

  console.log(array3);

  var anWord = array3.join('');
  return anWord;

}

var input = "We are farmers!";
reverseStr(input);

Сначала я помещал каждую букву ввода в массив в "array1". Затем я создал массив для индексов пространств «array1», который называется «space».

Затем «array2» - это массив «array1» в обратном порядке.

Затем «Space2» - это массив индексов для «array2», а затем я использовал для l oop, чтобы разделить пробелы в array2. Тогда «nWord» - это «массив2», объединенный в новое слово.

Тогда «массив3» - это массив для всех букв nWord, и я использовал обратное значение для l oop для попытки ввода пробелов в «массив3» и использования индексов массива «пробелы». К сожалению, он не возвращает "! Rem remferaeW" и возвращает "! Remr aferaeW".

Я пытаюсь узнать, как я могу использовать индексы массива «pace »для создания пробелов в« array3 »по индексам 2 и 7.

1 Ответ

1 голос
/ 31 марта 2020

Вам просто нужно внести следующее изменение

 //for (var i = spaces.length - 1; i >=0; i = i - 1) {
  //    array3.splice(spaces[i], 0, " ");
  //}

  for (var i = 0; i < spaces.length; i = i + 1) {
      array3.splice(spaces[i], 0, " ");
  }

Вы читаете массив пробелов в обратном порядке, но, как указала проблема, пробелы должны быть в одном месте. Чтение с начала до конца sh исправило проблему.

function reverseStr(input){

  var array1 = [];  
  var array2 = [];
  var nWord;
  for (var i = 0; i < input.length; i++) {

    array1.push(input[i]);

  }

  var spaces = [];

    for (var i = 0; i < array1.length; i++) {
        if(array1[i] == " ") {
            spaces.push(i);
        }
    }

  console.log(array1);
  console.log(spaces);

  array2 = array1.slice().reverse();

  var spaces2 = [];

  for (var i = 0; i < array1.length; i++) {
        if(array2[i] == " ") {
            spaces2.push(i);
        }
    }

  console.log(spaces2);

  for (var i = spaces2.length - 1; i >=0; i--) {
      array2.splice(spaces2[i], 1);
  }

  console.log(array2);

  nWord = array2.join('');

  console.log(nWord);

  var array3 = [];

  for (var i = 0; i < nWord.length; i++) {
      array3.push(nWord[i]);
  }

  console.log(array3);

  //for (var i = spaces.length - 1; i >=0; i = i - 1) {
  //    array3.splice(spaces[i], 0, " ");
  //}
  
  for (var i = 0; i < spaces.length; i = i + 1) {
      array3.splice(spaces[i], 0, " ");
  }

  console.log(array3);

  var anWord = array3.join('');
  return anWord;

}

var input = "We are farmers!";
reverseStr(input);
...