【问题标题】:Reverse whole string while keeping the spaces at the same position反转整个字符串,同时将空格保持在同一位置
【发布时间】:2020-07-12 07:42:53
【问题描述】:

这是我尝试过的代码。如果我们输入“我们是农民!”它应该返回“!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”的空间索引创建了一个数组,称为“spaces”。

那么“array2”就是一个“array1”反转的数组。

然后“spaces2”是“array2”的索引数组,然后我使用 for 循环拼接出 array2 中的空格。那么“nWord”就是“array2”组合成一个新词。

然后“array3”是所有 nWord 字母的数组,我使用反向 for 循环尝试将空格输入“array3”并使用“spaces”数组的索引。不幸的是,它没有返回“!s rem raferaeW”,而是返回“!s remr aferaeW”。

我想知道如何使用“spaces”数组的索引在“array3”的索引 2 和 7 处创建空间。

【问题讨论】:

    标签: javascript arrays for-loop reverse


    【解决方案1】:

    您只需要进行以下更改

     //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, " ");
      }
    

    您正在反向读取空格数组,但正如问题所述,空格应该在同一个地方。从头到尾阅读它解决了这个问题。

    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);

    【讨论】:

    • 您还可以将代码最小化很多。要将字符串转换为字符数组,您可以使用string.split('')。您可以通过array2.join('').split(' ').join('') 删除空格,而不需要空格2 数组。最后,如果您能接受答案,那就太好了:)
    【解决方案2】:

    这是我最擅长的。

    const reverseStr = (input) => {
      const revArr = input.replaceAll(' ', '').split('').reverse();
      for (let i = 0; i < revArr.length; i++) {
        if (input[i] === ' ') revArr.splice(i, 0, ' ');
      }
      return revArr.join('');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-24
      • 2014-06-01
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      • 2018-04-04
      相关资源
      最近更新 更多