所以我在CoderByte上做了一些代码挑战,我无法让Letter Exchange工作。我们的想法是将字符串中的所有字符与字母表后面的字符进行交换。我试过这段代码:
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 :(得分:0)
首先,你的for循环需要一些工作。您应该将i
初始化为0
,即第一个索引,因为访问字符串中的字母是从零开始的。但是,字符串的长度是从一开始的,因此如果您尝试访问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());
&#13;
注意我做了什么,分开大写和小写字母。那是因为我假设您必须更改案件中的信件。 (因此Z
将成为A
,z
将成为a
)