Обратная строка без обращения вспять специальных символов с помощью Javascript

#javascript #string #reverse

#javascript #строка #переворачивать

Вопрос:

Я не могу найти проблему в этом коде. Я хочу перевернуть строку без реверсирования специальных символов. Итак, если строка является 'ab#$cd!' , то на выходе будет 'dc#$ba!' тот результат, который я получаю, 'ab#$cd!' (такой же, как и на входе).

Пожалуйста, найдите проблему в коде.

 function isAlphabet(x) {

  if ((x >= 'A' amp;amp; x <= 'Z') || (x >= 'a' amp;amp; 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());  

Комментарии:

1. Чего вы ожидаете, когда ‘abcd #$ ef!’ ? В вашем примере количество букв перед специальными символами такое же, как и у последних.

Ответ №1:

Вы не можете изменить строку таким образом, строки неизменяемы в JavaScript

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

console.log(str)  

Измените вашу строку на array, измените array, а затем присоедините его:

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

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

Ваш пример (рассмотрите переименование переменных — я оставил оригинальные имена):

 function isAlphabet(x) {

  if ((x >= 'A' amp;amp; x <= 'Z') || (x >= 'a' amp;amp; 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)