【问题标题】:Reverse string without reversing special characters using Javascript使用Javascript反转字符串而不反转特殊字符
【发布时间】:2019-03-21 10:08:28
【问题描述】:

我无法在此代码中找到问题。我想反转字符串而不反转特殊字符。所以,如果字符串是 'ab#$cd!' ,输出将是 'dc#$ba!' 我得到的输出是 'ab#$cd!' (与输入相同)。

请在代码中找出问题所在。

function isAlphabet(x) {

  if ((x >= 'A' && x <= 'Z') || (x >= 'a' && x <= 'z')) {
    return true
  } else {
    return false
  }
}

function reverse() {
  var string1 = [];
  string1 = 'ab#$cd!'

  var n = string1.length;
  var r = n - 1;
  var i = 0;

  while (i < r) {

    if (!isAlphabet(string1[i])) {
      i++;
    } else if (!isAlphabet(string1[r])) {
      r--;
    } else {
      var temp;
      temp = string1[i];
      string1[i] = string1[r];
      string1[r] = temp;
      i++;
      r--;
    }
  }
  return string1;
}

console.log(reverse());

【问题讨论】:

  • 当 'abcd#$ef!' 出现时你会期待什么?在您的示例中,特殊字符之前的字母数与最后一个相同。

标签: javascript string reverse


【解决方案1】:

这种方式不能修改字符串,字符串在 JavaScript 中是不可变的

var str = "abcdef";
console.log(str[1])
str[1] = "x"

console.log(str)

把你的字符串改成数组,修改数组然后加入它:

var str = "abcdef", arr = str.split("");
console.log(arr[1])
arr[1] = "x"

console.log(arr.join(""))

您的示例(考虑重命名变量 - 我保留了原始名称):

function isAlphabet(x) {

  if ((x >= 'A' && x <= 'Z') || (x >= 'a' && x <= 'z')) {
    return true
  } else {
    return false
  }
}

function reverse() {
  var string1 = [];
  string1 = 'ab#$cd!'.split("")

  var n = string1.length;
  var r = n - 1;
  var i = 0;

  while (i < r) {

    if (!isAlphabet(string1[i])) {
      i++;
    } else if (!isAlphabet(string1[r])) {
      r--;
    } else {
      var temp;
      temp = string1[i];
      string1[i] = string1[r];
      string1[r] = temp;
      i++;
      r--;
    }
  }
  return string1.join("");
}

console.log(reverse());

【讨论】:

    【解决方案2】:

    这是一个使用 split()、pop()、push() 和 reverse() 方法的片段。

     function reverseString(str){
        var splitString, exclamationMark, reverseArray, joinArray;
        splitString = str.split("");
        exclamationMark = splitString.pop();
        reverseArray = splitString.reverse();
        reverseArray.push(exclamationMark);
        joinArray = reverseArray.join("");
        return joinArray;
     }
     console.log(reverseString("ab#$cd!"));

    【讨论】:

      【解决方案3】:
      var str = "#hello$worl!d" var spclindx = []; var final = ''
      
      var onlyalpha = str.match(/[a-z]|[A-Z]/g).reverse();
      
      [...str].map((x, key) => { if (!x.match(/[a-z]/i)) { spclindx.push(key + '.' + x) } })
      
      spclindx.map(y => { var sp = y.split('.'); console.log(sp) final = onlyalpha.splice(sp[0], 0, sp[1]) final = onlyalpha.join('') })
      
      console.log(final)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-07-20
        • 2015-05-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-26
        • 1970-01-01
        相关资源
        最近更新 更多