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