2015-05-14 155 views
0

我正在使用for循環移動每個字母(「a」變成「b」,「z」變成「a」)來更改字符串,但每當函數循環時,它不存儲新值。當ABC應該得到「BCD」時,我得到循環「BBC,ACD,ABD」的功能。用for循環不斷更新變量

我是新來的編碼,我肯定有一個更簡單的方法來做到這一點(它被歸類爲簡單在coderbyte挑戰),但我想嘗試和解決這個問題,因爲這是我想出的。

提示>回答。我被困在這個上的時間越長,我就越能確定這個代碼的工作原理,特別是因爲我感覺如此親密!

function moveLetter(str) { 
 
    var index = ["a","b","c"..."z", "a"] //sorry didn't want to type out the whole alphabet and my code just crashed 
 
    var alpha = "zabcdefghijklmnopqrstuvwxyz" 
 
    var new = "" 
 
    
 
    for (c=0; c<=str.length-1; c++) { 
 
    if (str.charAt(c) == " ") 
 
     str.charAt(c) == " "; //I did this to circumvent the "undefined" error I would get when the loop hits a space 
 
    
 
    else 
 
     str = str.replace(str.charAt(c), index[alpha.search(str.charAt(c)))]; 
 

 
} 
 

 
return str 
 
}

是的,這是代碼做一些比較簡單的一個醜陋的科學怪人。

我的想法是讓循環遍歷給定字符串的每個字符,並根據我製作的索引數組替換它。

核心問題(除了我爲什麼做這種方式)是「我怎麼讓變量保持第一循環之後的變化,所以它看起來是這樣的:

ABC - > BBC - > BCC - > BCD

感謝大家的幫助

+0

'新變種= 「」'應該拋出一個錯誤。 – canon

+1

您可能感興趣的['String.prototype.charCodeAt()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt)和['String .fromCharCode()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode)。第一個給出了字符串中字符的數字代碼,第二個給出了字符代碼中的字符串。用這些,你可以用簡單的算術運算來移動字符。 – Pointy

回答

0

var str = 'string'; // Call toLowerCase if needed 
 

 
var length = str.length; 
 

 
var START_CHAR_CODE = 97; 
 
var END_CHAR_CODE = 122; 
 

 
var output = []; 
 

 
for (var i = 0; i < length; i++) { 
 

 
    var code = str.charCodeAt(i); 
 
    
 
    if (code === END_CHAR_CODE) { 
 
    code = START_CHAR_CODE; 
 
    } else { 
 
    code++; 
 
    } 
 
    
 
    output.push(String.fromCharCode(code)); 
 

 
} 
 

 
alert(output.join(''));

0

一公路保持它本原簡單!根據你的代碼:你只有只有需要一個字符串與字母表。 陣列不必要的。在

var alpha = "abcdefghijklmnopqrstuvwxyz"

每一個字母是小寫。要比較字符串,請首先將其設置爲小寫字母

var str = str.toLowerCase()

接下來,檢查最後一個字母「z」。這應該是「一」

if(str[i] == "z") { 
    result += "a"; 
} 

隨着字符串的方法搜索,我們得到的字符串中的匹配值的指數。這裏我們需要後面的索引

alpha.search(str[i]) + 1

從這個指標,我們想信:

alpha.charAt(alpha.search(str[i]) + 1)

完成:

function moveLetter(str) { 
    var str = str.toLowerCase(); // every character to lower case 
    var alpha = "abcdefghijklmnopqrstuvwxyz"; 
    var result = ""; 
    for(var i = 0; i < str.length; i += 1) { 
     if(str[i] == "z") { 
      result += "a"; 
     } else { 
      result += alpha.charAt(alpha.search(str[i]) + 1); 
     } 
    } 
    return result.toUpperCase(); // upper case 
    // return result; 
} 

Demo