在字符串Javascript中查找丢失的字母
Find missing letter in string Javascript
因此输入是一个按字母顺序排列的字符串。在那里的某个地方,一封信不见了。我必须归还丢失的信。我已经在下面发布了我的代码。评论很好,这些评论比我在这里能解释得更好。我将在下面解释我的问题。
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.
/*
* Returns the first non alphabetic character in the input string. If
* all characters are in alphabetic order function returns null.
*/
function findFirstNonAlphabeticCharIn(input) {
for (var i = 1; i < input.length; i++) {
var range = input.charCodeAt(i) - input.charCodeAt(i - 1);
if (range != 1) return input.charAt(i);
}
return null;
}
请注意,在这两种情况下,函数都会返回一个值。
这是我的看法:
function fearNotLetter( str ) {
var ch0 = str.charCodeAt(0), ch;
str.split("").every(function(v, i){
ch = String.fromCharCode(ch0 + i);
return ch === v;
});
return ch === str[str.length-1] ? undefined : ch;
}
console.log( fearNotLetter("cdefgij") ); // "h"
您可以使用这个简单的解决方案
function fearNotLetter(str){
let num = 97;
for(let s of str){
if(s.charCodeAt(0) !== num) return String.fromCharCode(num);
num++;
}
return String.fromCharCode(num)
}
循环中断,因为如果test
不大于1,则从函数返回。
祝一切顺利
我仍然在用奶瓶喝JS。我想出了一个解决这个问题的办法:
希望你喜欢
区块报价
function fearNotLetter(str) {
//STRATEGY
//1. create a string of the whole alphabet
//2. locate the starting point of str in the alphabet string
let alphaStr = 'abcdefghijklmnopqrstuvwxyz';
let strIndex = alphaStr.match(str.charAt(0)).index;//on what index does the first letter of the incomplete sequence lie in the alphabet string
console.log(strIndex);
for (var j = 0; j < str.length; j++) {//limit the iteration to the length of the incomplete sequence
if (str.charAt(j) !== alphaStr.charAt(j + strIndex)){//corresponding iteration matches on the alphabet start where the incomplete string start
console.log(alphaStr.charAt(j + strIndex));
return alphaStr.charAt(j + strIndex);
}
}
}
let alphaStr = 'abcdefghijklmnopqrstuvwxyz';
let testStr = 'stvwx';
let testIndex = alphaStr.match(testStr.charAt(0)).index;
console.log(`THE CHARACTER AT INDEX ${testIndex} IS ${alphaStr.charAt(testIndex)}`)
fearNotLetter("abce");
fearNotLetter('abcdefghjklmno');
fearNotLetter('bcdf');
fearNotLetter('stvwx');
fearNotLetter('abcdefghijklmnopqrstuvwxyz')
如下所示:
let value = "ghijklmnoqstuw" //missing p,r,v
//find first missing character
function findOdd(test){
let abc = "abcdefghijklmnopqrstuvwxyz"
let sp = abc.indexOf(test[0])
for(let i = 0;i<test.length;i++){
if(test[i]!==abc[sp+i]){
console.log(abc[sp+i]);
//sp++; i--; //uncomment to find all missing character
break; // comment to find all missing character
}
}
}
findOdd(value)
相关文章:
- 遍历DOM查找字符串有时会正确返回
- 查找字符串及其索引中的最大数字
- 使用正则表达式查找字符串中的不匹配字符
- 如何在日志文件中查找字符串并返回整行
- 使用for循环查找字符串中的特定字符
- 正则表达式查找字符串并返回大括号之间的所有内容
- javascript查找字符串并删除以下所有字符
- 如何在数组jQuery中查找字符串的一部分
- 如何在对象中查找字符串
- 正则表达式,用于查找字符串的所有出现项,然后查找其后面的下一个空格
- 查找字符串中类型的最后一个字符
- 查找字符串中出现的字符数
- 快速查找字符串是否在数组中
- 使用 JQuery.inArray() 查找字符串
- 在 MongoDB 集合中查找字符串
- 用于查找字符串中的值的正则表达式
- 查找字符串的单个匹配项,然后查找另一个模式的多个匹配项
- 查找字符串 jQuery/Javascript 的部分
- 在索引之后查找字符串的第一个索引
- 查找字符串中单词所有实例的位置,在控制台中得到不需要的重复