CoderByte挑战 - 信件交换

时间:2017-02-11 15:55:51

标签: javascript

所以我在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的新手。 感谢。

1 个答案:

答案 0 :(得分:0)

首先,你的for循环需要一些工作。您应该将i初始化为0,即第一个索引,因为访问字符串中的字母是从零开始的。但是,字符串的长度是从一开始的,因此如果您尝试访问str.length处的字符,它将返回null

试试这个:

&#13;
&#13;
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;
&#13;
&#13;

注意我做了什么,分开大写和小写字母。那是因为我假设您必须更改案件中的信件。 (因此Z将成为Az将成为a