使用Javascript反转字符串而不反转特殊字符

问题描述 投票:2回答:2

我无法在此代码中找到问题。我想反转字符串而不反转特殊字符。因此,如果字符串是'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());
javascript string reverse
2个回答
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());

0
投票

这是一个使用split(),pop(),push()和reverse()方法的snippit。

 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!"));
© www.soinside.com 2019 - 2024. All rights reserved.