Цезарь Шифр ​​- пробелы и другие персонажи - PullRequest
1 голос
/ 27 мая 2019

Я создал код Цезаря Шифра ниже, но я хочу, чтобы возвращаемая строка содержала пробелы и другие символы. Я пробовал регулярные выражения, но это, похоже, не решает проблему, или, может быть, я не правильно его использую, я не слишком уверен.

Любая помощь приветствуется. Спасибо!

function caesarCipher(str, n) {
  let newStr = '';
  let alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('')
  let regex = /[a-z]/

  for (let i = 0; i < str.length; i++) {
    if (str[i].match(regex) === false) {
      newStr += str[i]
      continue;
    }
    let currentIndex = alphabet.indexOf(str[i]);
    let newIndex = currentIndex + n;
    newStr += alphabet[newIndex];
  }
  return newStr
}

console.log(caesarCipher('ebiil tloia!', 3)) //should return hello world! but returns hellocworldc

Ответы [ 2 ]

1 голос
/ 27 мая 2019

RegExp.test возвращает логическое значение, String.match возвращает массив. Эта строка:

if (str[i].match(regex) === false) {

должно быть

if (regex.test(str[i]) === false) {

Это должно поймать любое значение, которое не является строчной буквой (пробелы, знаки пунктуации и т. Д.). - Если вы хотите также кодировать верхний регистр, добавьте флаг i в конце регулярного выражения: /[a-z]/i

0 голосов
/ 27 мая 2019

Во-первых, вам нужно передать сдвиг (3) в функцию. Во-вторых, поскольку в alphabet нет пробелов, необходимо добавить тест:

function caesarCipher(str, n) {
  let newStr = '';
  let alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('')
  let regex = /[a-z]/

  for (let i = 0; i < str.length; i++) {
    if (str[i].match(regex) === false) {
      newStr += str[i]
    }
    let currentIndex = alphabet.indexOf(str[i]);
    if (!(currentIndex + 1)) {
      newStr += " ";
    } else {
      let newIndex = currentIndex + n;
      newStr += alphabet[newIndex];
    }
  }
  return newStr
}

console.log(caesarCipher('ebiil tloia!', 3)) //should return hello world! but returns hellocworldc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...