我正在通过使用for循环移动每个字母(“a”变为“b”,“z”变为“a”)来更改字符串,但每次函数循环时,它都不会存储新字符串值。当ABC应该得到“BCD”时,我得到循环“BBC,ACD,ABD”的功能
我是编码的新手,我很肯定有一个更简单的方法来做到这一点(在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 - &gt; BBC - &gt; BCC - &gt; BCD
感谢大家的帮助
答案 0 :(得分: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(''));
&#13;
答案 1 :(得分:0)
始终保持简单和简单!根据您的代码:您仅需要带字母表的字符串。 数组 不必要。在
var alpha = "abcdefghijklmnopqrstuvwxyz"
每个字母都是小写字母。要比较字符串,请先将其设置为小写:
var str = str.toLowerCase()
。
接下来,检查最后一个字母“z”。这应该是“a”:
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;
}