如何更换相互提前15个字母的字母?

问题描述 投票:0回答:3

我试图替换用户输入的每个字符,字母前面是15个字母。例如,如果用户输入单词A,那么它将输出“P”。

单词“AB”将输出“PQ”,依此类推每个单词。

我尝试了以下代码,但它无法正常工作。我想循环可能是答案,但如果有人能想到一些更好的想法让我知道。

alphabetArray = ["abcdefghijklmnopqrstuvwyxz"];

function jumpAhead15(aString){
   aString.replace(alphabetArray[0][aString + 15]);
}

jumpAhead15("hi");
javascript algorithm
3个回答
3
投票

您可以将字符串视为可迭代并获取一个字符数组,并通过获取索引和偏移量来替换任何字符,并通过字母表长度的其余部分进行调整。

reminder operator %返回分区的其余部分:

当一个操作数除以第二个操作数时,余数运算符返回剩余的余数。它总是采取红利的标志。

该函数用于保持使alphabet的字符在有效范围内的索引。例如,通过获取指数2015的有用移位,你得到的35不是alphabet的索引。通过使用余数运算符,您将获得9的值,这是35 / 26 = 1 rest 9的其余部分

然后返回该字符并将该数组连接到最终字符串。

使用方法:

  • Array.from,它接受两个参数,一个可迭代或一个具有length属性和一个mappring函数的对象,为新数组的每个元素调用。 (c是回调的第一个参数,在这里表示单个字符)
  • arrow function作为Array.from的回调

function jumpAhead15(aString) {
    var alphabet = "abcdefghijklmnopqrstuvwyxz";
    return Array
        .from(
            aString,
            c => alphabet[(alphabet.indexOf(c) + 15) % alphabet.length]
        )
        .join('');
}
console.log(jumpAhead15("hi"));
console.log(jumpAhead15("ab"));

0
投票

使用上面的alphabetArray,尝试:

aString.split("").map(letter => alphabetArray[(alphabetArray.indexOf(letter) + 15) % 26]).join("");

即:将字符串转换为1个字母的字符串数组,将每个字母更换为15个位置(必要时包装,因此模数运算符%),然后将字母重新组合成一个字符串。


0
投票

如果你发现Nina的答案很难理解,那么这个也可能不适合你,但这里有一个基于更通用的字母轮换方案的功能。它还处理案例中的差异:

const rotate = (configs) => (str) => str.split('').map(
  c => configs.reduce(
    (s, [letters, offset]) => {
      const idx = letters.indexOf(s);
      return idx < 0 ? s : letters[(idx + offset) % letters.length]
    },
    c
  )
).join('')

const by15 = rotate([
  [[...'abcdefghijklmnopqrstuvwxyz'], 15],
  [[...'ABCDEFGHIJKLMNOPQRSTUVWXYZ'], 15]
])

console.log(by15('ab'))            //~> 'pq'
console.log(by15('aB'))            //~> 'pQ'
console.log(by15('Hello, world!')) //~> 'Wtaad, ldgas!'

这与模数运算符使用相同的基本技术,稍微修改以返回原始字符(如果它不在我们的列表中)。我们为每个提供的字母表执行此操作,在本例中为大写和小写字母。这仅在不同的字母表没有重叠时才有效。我们将偏移量与每个字母一起传递,以防万一,例如,将数字旋转3,字母数旋转15.如果您不想这样做,可以将偏移量移出configs参数(其中)如果它可能被称为alphabets)并使单个偏移量为rotate的第二个参数。

注意结构:rotate是一个箭头函数,它返回一个箭头函数。因此,要从中获取有用的功能,您需要使用字母配置来调用它。返回的函数只接受一个字符串并返回旋转的字符串。

这不是最有效的解决方案,因为您必须遍历每个字母表,即使您已经找到它。由于我不希望它与许多字母表一起使用,这对于相对干净的代码来说似乎是一个很好的权衡。但是人们可以很容易地编写一个搜索过的版本,直到它找到一个包含你的角色的字母表然后处理那个角色。这留给读者练习。

© www.soinside.com 2019 - 2024. All rights reserved.