在字符串Javascript中查找丢失的字母

Find missing letter in string Javascript

本文关键字:查找 字符串 Javascript      更新时间:2023-09-26

因此输入是一个按字母顺序排列的字符串。在那里的某个地方,一封信不见了。我必须归还丢失的信。我已经在下面发布了我的代码。评论很好,这些评论比我在这里能解释得更好。我将在下面解释我的问题。

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)