因此输入是按字母顺序排列的一串字母。那里的某个地方,有一封信不见了。我必须归还丢失的信。我在下面发布了我的代码。它得到了很好的评论,这些评论比我在这里能解释得更好。我将在下面解释我的问题。
function fearNotLetter(str) {
var charCodes;
var test;
var offendingNumber;
var numToString;
// i starts at 1, increments to str.length
for (var i = 1; i < str.length; i++) {
// Char code of last letter minus char code of second last letter,
// Char code of second last letter minus char code of third last letter, etc.
// Repeat on a loop and set result equal to test each time.
test = str.charCodeAt(str.length - [i]) - str.charCodeAt(str.length - [i + 1]);
console.log(test);
// If charCode A - charCode B == 1, then letters are in order
// alphabetically and test returns 1.
// If charCode A - charCode B > 1, then letters missing from string.
// So if difference between char codes is more than 1,
// return missing char code and convert to string.
if (test > 1) {
offendingNumber = str.charCodeAt(str.length - [i]);
numToString = String.fromCharCode(offendingNumber);
console.log(numToString);
} // End of if.
// If no letters missing from input, return undefined.
else {
return undefined;
} // End of else.
} // End of loop.
} // End of function.
// Here is the input str
fearNotLetter("abce");
问题就在这里。如果我输入“abce”,我会丢失 d。 console.log(test) 返回 2,我可以得到丢失的字母。太棒了。
如果我输入“abcef”(与之前相同的字符串,最后加上 f),我仍然缺少 d。测试返回 1,好像没有丢失字母,但 d 仍然丢失。
仅当缺少的字符适合字符串中的倒数第二个空格时,我的程序才有效。 “lmnp”有效,但“lmnpqrs”无效。
我的循环显然是在迭代字符串中的每个字符,因为它可以从长字符串“abcdefghijklmnopqrstuvxyz”中找出丢失的 w。当缺少的字符后面有多个字符时,为什么我的循环会崩溃?它的行为就好像我在循环之外调用 console.log(test) ,并且只返回最后一次迭代。我尝试将测试推送到数组,但这没有任何帮助。
最佳答案
有几个问题:您的索引是困惑的(即相差一); undefined
的返回应该在循环之外,而不是在循环内;您在不应该使用的地方使用了 str.length
;当你不应该将迭代变量放入括号时:
function fearNotLetter(str) {
var difference;
var missingCharCode;
// i starts at 1, increments to str.length
for (var i = 1; i < str.length; i++) {
// Char code of last letter minus char code of second last letter,
// Char code of second last letter minus char code of third last letter, etc.
// Repeat on a loop and set result equal to test each time.
difference = str.charCodeAt(i) - str.charCodeAt(i - 1);
// If charCode A - charCode B == 1, then letters are in order
// alphabetically and test returns 1.
// If charCode A - charCode B > 1, then letters missing from string.
// So if difference between char codes is more than 1,
// return missing char code and convert to string.
if (difference > 1) {
missingCharCode = str.charCodeAt(i) - 1;
return String.fromCharCode(missingCharCode);
} // End of if.
} // End of loop.
return undefined;
} // End of function.
关于javascript - 查找字符串中缺失的字母 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36241309/