【问题标题】:CoderByte Letter Changes Java ScriptCoderByte 字母更改 Javascript
【发布时间】:2016-02-17 00:00:01
【问题描述】:

问题是:

使用 JavaScript,让函数 LetterChanges(str) 接受正在传递的 str 参数,并使用以下算法对其进行修改。将字符串中的每个字母替换为字母表中紧随其后的字母(即,c 变为 d,z 变为 a)。然后将这个新字符串中的每个元音(a、e、i、o、u)大写,最后返回这个修改后的字符串。

function LetterChanges(str){ 
  var result = "";
  for(var i = 0; i < str.length; i++) {
    var letters = str[i];
    if (letters == "a"|| letters == "e"|| letters == "i"|| letters == "o"|| letters =="u") {
      letters = letters.toUpperCase();
      result+=letters;
    } else if (letters == "z") {
      letters = "a";
    } else {
      var answer = "";
      var realanswer="";
      for (var i =0;i<str.length;i++) {
        answer += (String.fromCharCode(str.charCodeAt(i)+1));
      }              
      realanswer += answer
    }
  }
  return realanswer;
  return result;
}
LetterChanges();

基本上,如果将 return realanswer 放在返回结果之前,并且使用“o”调用 LetterChanges,我会得到未定义的输出。但是如果用非元音如“b”调用它会输出“c”,这是正确的。

现在,如果我在返回 realanswer 之前放置返回结果,它将适用于元音,但不适用于其他字母。感谢您的帮助

【问题讨论】:

  • 您的代码有一些问题,但您可能希望从这两个问题开始: 1. 您需要为嵌套的 for 循环使用不同的变量(不要使用 i for两个for循环)2.有后续的return语句没有意义,因为只有第一个return语句会执行
  • 代码设计有缺陷。您需要在代码中有两个步骤,而不是作为第一步检查输入字符串中的元音。还要考虑如何处理输入字符串中的大写字母。

标签: javascript


【解决方案1】:
    function LetterChanges(str) { 

      return str
        .replace(/[a-zA-Z]/g, (x) =>  String.fromCharCode(x.charCodeAt(0)+1))
        .replace(/[aeiou]/g, (v) => v.toUpperCase());
    }
  1. 第一部分以 1 为增量修饰辅音。

    • Regex 使用[] 来隔离字符,而根本没有括号。 g 确保将正则表达式应用于字符串中的任何位置,而不是将 g 放在第一次出现搜索时。

    • 您必须将字符串中的字符转换为其 Unicode,因为递增是一种数学运算。 x.charCodeAt(0) 表示参数中字符串的索引为 0。 1的增量不在括号内,而是在括号外。

  2. 第二部分将元音修改为大写。

    • 这很简单,正则表达式只查找单个字符,因为使用了[]g 用于字符串中的任何位置。而修饰符就是让字符变成大写。

【讨论】:

    【解决方案2】:
     function LetterChanges(str) {
      var lstr = "";// Took a variable to store  after changing alphabet//
    
      for(var i=0;i<str.length;i++){
       var asVal = (str.charCodeAt(i)+1);// To convert string to Ascii value and 1 to it//
        lstr += (String.fromCharCode(asVal));// To convert back to string from Asii value//
      }
      console.log("Before converting vowels :"+lstr); //Printing in console changed alphabet//
      var neword =""; // variable to store word after changing vowels to uppercase// 
      for(i=0;i<lstr.length;i++){
        var strng = lstr[i]; // Storing every letter in strng variable while running loop //
        if(strng=="a"||strng=="e"||strng=="i"||strng=="o"||strng=="u"){
            neword += strng.toUpperCase(); // If it a vowel it gets uppercased and added //
           }
        else{
            neword += strng; // If not vowel , it just gets added without Uppercase //
        }
    
      }
      console.log("After converting vowels :"+neword); //Printing in console the word after captilising the vowels //
    }
    
    LetterChanges("Goutham"); // Calling a function with string Goutham //
    

    【讨论】:

    • 添加一些cmets会更好,为什么这个函数可以解决问题。
    • 我同意。肯定更好。
    【解决方案3】:
    function letterChanges(str) {
      let res = '';
      let arr = str.toLowerCase().split('');
    
      // Iterate through loop
      for(let i = 0; i < str.length; i++) {
        // Convert String into ASCII value and add 1
        let temp = str.charCodeAt(i) + 1;
        // Convert ASCII value back into String to the result
        res += (String.fromCharCode(temp));
      }
      console.log(res);
      // Replace only vowel characters to Uppercase using callback in the replace function
      return res.replace(/[aeiou]/g, (letters) {
          return letters.toUpperCase();
      });
    }
    

    【讨论】:

    • add对你的回答做一些解释
    【解决方案4】:
    function LetterChanges(str) { 
    
      return str
        .split('')
        .map((c) => String.fromCharCode((c >= 'a' && c <= 'z') ? (c.charCodeAt(0)-97+1)%26+97 : (c >= 'A' && c <= 'Z') ? (c.charCodeAt(0)+1-65)%26+65 : c.charCodeAt(0)))
        .join('').replace(/[aeiou]/g, (letters) => letters.toUpperCase());
    
    }
    

    【讨论】:

    • 您好,欢迎来到 stackoverflow,感谢您的回答。您能否简单地解释一下您解决了什么问题以及您是如何解决的,而不是仅仅发布一段代码?这将有助于以后发现此问题的人更好地了解该问题以及如何处理它。
    【解决方案5】:
    export const letterChange=(str)=>{
    
        let newStr = str.toLowerCase().replace(/[a-z]/gi, (char)=>{
            if(char==="z"){
                return "a"
            }else{
                return String.fromCharCode(char.charCodeAt()+1)
            }
        })
    
        let wordCap = newStr.replace(/a|e|i|o|u/gi, char => char.toUpperCase())
    
        return wordCap
    }
    

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 2013-08-04
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多