2017-02-11 27 views
-1

所以我在CoderByte上做了一些代码挑战,而且我无法让Letter Exchange工作。这个想法是将字符串中的所有字符与字母后面的字符交换。我试着用这个代码:CoderByte挑战 - 字母交换

function LetterChanges(str) { 

var string = ""; 
var i = 1; 
var alp = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
var c = ""; 

for(i; i<=str.length; i++){ 
    c = alp.charAt(alp.indexOf(str.charAt(i))); 
    string = string + c; 
} 

return string; 

} 

LetterChanges(readline()); 

但它不会工作,我不知道为什么。如果你能指出我的错误,这将是非常有帮助的。 :) 我知道这对你们中的很多人来说很容易,但我是JavaScript新手。 谢谢。

回答

0

首先,您的for循环需要一些工作。您应该初始化i0,这是第一个索引,因为从字符串中访问字母是从零开始的。但是,字符串的长度是基于一个字符串的,所以如果您要访问str.length处的字符,它将返回null

试试这个:

function LetterChanges(str) { 
 
    var string = ""; 
 
    var i = 0; 
 
    var upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
 
    var lower = "abcdefghijklmnopqrstuvwxyz"; 
 
    var c = ""; 
 

 
    for(i; i<str.length; i++){ 
 
    if(str.charCodeAt(i) == str[i].toUpperCase().charCodeAt(0)){ // check if it's uppercase 
 
     c = upper[(upper.indexOf(str[i])+1)%upper.length]; // modulo for edge case if it's a zed 
 
    } else { // otherwise it's lowercase 
 
     c = lower[(lower.indexOf(str[i])+1)%lower.length]; // same thing as what's in the uppercase 
 
    } 
 
    string = string + c; 
 
    } 
 

 
    return string; 
 
} 
 
LetterChanges(readline());

通知我做什么,分离大写和小写字母。那是因为我假设你必须改变案件中的信件。 (所以Z会变成A,z会变成a