2015-08-10 3 views
0

Это мой код javascript для изменения строки.Обратная функция строки не работает

function FirstReverse(str) { 

    var left = 0 
    var right = str.length; 

    while (left<right) 
    { 
     var temp = str[left] 
     str[left] = str[right-1] 
     str[right-1] = temp 

     left ++ 
     right -- 
    } 

    return str; 
} 

Я уверен, что логика моей программы является правильным, как я делал это раньше на C++ и раньше, но по какой-то причине, вероятно, как память выделяется в JavaScript, FirstReverse возвращает исходную строку

Может ли какая-то душа указать мне, когда я пошла не так и объяснила мне ???

Благодаря

+0

что он возвращает? – Armand

+0

возвращает исходную строку – Computernerd

+1

Я ожидаю, что это вызовет ошибку, потому что первая ссылка на 'str [right]' будет за пределами – Armand

ответ

0

Строки в значительной степени неизменны, если вы идете по этой дороге.

Вы должны сделать что-то одно, прежде чем манипулировать этими данными, преобразовать строку в массив, сохранить манипуляции с массивом (использовать правильные имена переменных) и преобразовать массив обратно в строку.

Это может выглядеть примерно так:

function FirstReverse(str) { 
    var left = 0 
    var right = str.length; 
    var buffer = str.split(''); 

    while (left<right) 
    { 
     var temp = buffer[left] 
     buffer[left] = buffer[right] 
     buffer[right] = temp 

     left ++ 
     right -- 
    } 
    return buffer.join(''); 
} 
1

@ Комментарий компакт-дисков:.

str.split('').reverse().join('') 

делает то, что вы хотите. Он разбивает строку для каждого символа в виде массива, меняет порядок массива и соединяет его вместе как строку.

В вашем случае:

function FirstReverse(str) { 
    return str.split('').reverse().join(''); 
} 
0

Вы cannot modify strings in-place в JavaScript. Простым другим подходом было бы начать с пустой строки и добавить символы справа налево.

function reverse(str) { 
    var newStr = ''; 
    for(var i = str.length - 1; i >= 0; i--) { 
    newStr += str[i] 
    } 
    return newStr; 
} 
0

вот это исправление, близко к коду:

function FirstReverse(str) { 
 

 
    
 
    var right = str.length-1; 
 
    var rev=""; 
 

 
    while (right>=0) 
 
    { 
 
     var temp = str[right] 
 
     rev = rev+ temp; 
 
     
 
     right -- 
 
    } 
 

 
    return rev; 
 
} 
 

 
alert(FirstReverse("abcde"));

Однако это не является оптимальным реализации, но оно должно быть понятным для вас.

Что мы делаем, это сделать новую пустую строку (rev), чтобы провести обратную. Мы находим последнюю букву (str.length-1) и начинаем добавлять ее к строке результата (rev), и мы уменьшаем позицию, по которой мы вытягиваем 1, пока мы не достигнем начала строки.

0

См. Альтернативное решение. Он начинается с последней позиции строки и учитывается в обратном направлении, добавляя к обратному символу строки 1 за раз.

function FirstReverse(str) { 
    var rstr=''; 
    for (var l=str.length;l>0;l--) 
    { 
     rstr+=str.substring(l-1,l) 
    } 
    return rstr; 
} 
// example: 
FirstReverse('foobar'); // output: raboof 
+0

Не могли бы вы объяснить свой ответ в дополнение к отправке кода? – xShirase

+0

Несомненно @xShirase, сделано. –

Смежные вопросы