@kachurinets

Как сделать реверс строки без использования стандартных методов?

Подскажите как сделать реверс строки без использования стандартных методов к примеру reverse() и т. д. Также не нужно использовать массив, дополнительные переменные. Нужно просто на месте менять значение строки

К примеру здесь используется дополнительная переменная o;
function reverse(s) {
  var o = '';
  for (var i = s.length - 1; i >= 0; i--)
    o += s[i];
  return o;
}


Ниже не используется дополнительная переменная, но такое решение не подходит, так как строка просто увеличивается в два раза, а потом уменьшается.
function reverse(s) {
  for (var i = s.length - 1; i >= 0; i--) {
    s+= s[i];
    }
  return s.substring(s.length/2);
}

Может есть другой способ это сделать ? К примеру менять первый и последний символ и так дальше пока не поменяется все. Как это реализовать?
  • Вопрос задан
  • 2088 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Нужно просто на месте менять значение строки

Нужно? Невозможно. Строки в JS иммутабельны:

str = 'abc';
str[1] = '!';
console.log(str); // чё, ждали "a!c"? - а вот ни хрена, "abc"
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
Xuxicheta
@Xuxicheta
инженер
let str = 'abcdefg';
for (let i = 0; i < str.length; i ++) {
  str = str.slice(1, str.length - i) + str[0] + str.substr(str.length - i); 
}
console.log(str);

Никаких переменных, кроме счетчика цикла

Но вообще так писать не надо :)
Надо так
str.split('').reverse().join('');
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
UPD: подходящие варианты:
https://jsfiddle.net/1mcLfbdh/
https://jsfiddle.net/tfyfdbch/

неподходящие:
let x = [];
'Hello world!'.split('').forEach(s => x = [s].concat(x))
console.log(x.join(''))
https://jsfiddle.net/e2x7c463/

ололо!
let x = '', i = 'hakuna Matata!'.split('')
while (x+= i.splice(-1, 1), i.length) {}
x+=i

console.log(x)
https://jsfiddle.net/dc9fkdot/

После этого какой-нибудь reduceRight, pop или unshift даже скучно использовать.
Ответ написан
@McBernar
А рекурсия вам не подходит?

function func(str) {
	if(str === '') {
		return '';
	}
	return func(str.substr(1)) + str.charAt(0);
}
Ответ написан
dom1n1k
@dom1n1k
Обменять значения двух переменных без использования промежуточной можно используя побитовую операцию xor.
Дальше нагуглишь :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы