【问题标题】:Coderbyte Challenge 4: Letter Changes - Won't Upper CaseCoderbyte 挑战 4:字母更改 - 不会大写
【发布时间】:2013-11-07 23:24:58
【问题描述】:

我遇到了 Coderbyte 的挑战

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

这是我的代码:

function LetterChanges(str) {
str = str.toLowerCase();
var al = "abcdefghijklmnopqrstuvwxyz";
var vo = "aeiou";
var newStr = "";
for (var i = 0;i < str.length;i++) {
    if (al.charAt(al.indexOf(str.charAt(i))) == "z") {
        newStr += "A";
    }
    else if (str.charAt(i) == " "){
        newStr += " ";
    }
    else {
        if (al.charAt(al.indexOf(str.charAt(i))+1) == vo.charAt(vo.indexOf(str.charAt(i)))) {
            newStr += vo.charAt(vo.indexOf(str.charAt(i))+1).toUpperCase();
        }
        else {
            newStr += al.charAt(al.indexOf(str.charAt(i))+1)
        }
    }
}
   console.log(newStr);
}
LetterChanges("Argument goes here")

这会将以下内容返回到控制台: bshvnfou hpft ifsf

但我需要返回的是: bshvnfOU hpft Ifsf

我不知道为什么我的.toUpperCase() 不起作用。非常感谢您提供的任何帮助!

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您的问题不是 toUpperCase() 不工作,而是您的代码永远无法达到这一点。

    你的

    if (al.charAt(al.indexOf(str.charAt(i))+1) == vo.charAt(vo.indexOf(str.charAt(i))))

    永远不会通过,因为+1。那里没有必要,如果你删除它,就会出现大写元音。除此之外,您的代码还有其他问题,但作为挑战的一部分,我会让您解决它们 :-)

    【讨论】:

      【解决方案2】:

      哇,看看我一年前写的代码真是太疯狂了!回顾这个问题,这是我想出的(免责声明:仍然对 ES6 感到满意):

      function convertText (str) {
          const al = 'abcdefghijklmnopqrstuvwxyz';
          return str.toLowerCase().split('').map(letter => {
              if (letter.match(/\W/)) return letter;
              const index = al.indexOf(letter),
                  newLetter = (al[index + 1] || al[0]);
              return newLetter.match(/[aeiou]/) ? newLetter.toUpperCase() : newLetter;
          }).join('');
      }
      

      并且通过使用字符代码:

      function letterChanges (str) {
          const v = {d: 69, h: 73, n: 79, t: 85, z: 65};
          return str.toLowerCase().split('').map(l => 
              (l.match(/\W/) ? l : String.fromCharCode(v[l] || l.charCodeAt(0) + 1))
          ).join('');
      }
      

      可能有更好的方法,但仍然是一个有趣的问题!再次感谢您的帮助,@MattDiamant

      【讨论】:

        【解决方案3】:

        这是我的解决方案。它确实满足 z 成为的要求,但它通过了 Coderbyte 的测试,如下面的屏幕截图所示。

        function LetterChanges(str) {
            return str
                .replace(/[a-z]/gi, c => String.fromCharCode(c.charCodeAt(0) + 1))
                .replace(/[aeiou]/gi, c => c.toUpperCase());
        }
        
        // keep this function call here
        LetterChanges(readline());
        

        Letter Changes Javascript Solution

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-11
          • 1970-01-01
          • 2023-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-10-06
          • 1970-01-01
          相关资源
          最近更新 更多