Не удается исправить заглавные буквы в упражнении по коду Цезаря - PullRequest
1 голос
/ 14 июля 2020

Довольно новичок в программировании, поэтому любая помощь приветствуется.

Меня просят создать функцию, которая возвращает строку с заданным сдвигом по алфавиту. Например: function caesar('a', 1) должен возвращать b .

Сдвиг должен сохранять заглавные буквы, не должен сдвигать пунктуацию, должен переноситься вокруг алфавита, и отрицательные числа должны работать.

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

const caesar = function(string,shift) {
    let stringSplitted = string.split('');
    let cypher = [];
    stringSplitted.map( letter => {
    if (letter === ' ' || letter === ',' || letter === '!' || letter === '.') {
     return cypher.push(letter);
   }
   let index = alphabet.indexOf(letter);
   if (index + shift > 25) {
    cypher.push(alphabet[(index + shift) - alphabet.length])
   }
   else if(index + (shift)<0) {
    return cypher.push(alphabet[(index + shift) + alphabet.length])
   }
   else
    cypher.push(alphabet[index + shift]);
 })
  return cypher.join('')
}

Я знаю, что это довольно грязно. Каждый раз, когда я добавляю в строку заглавные буквы, результат выходит из-под контроля

Я пробовал это

 if  (letter === letter.toLowerCase()) 
 return cypher.push(alphabet[index + shift].toUpperCase())

, но он возвращает индекс, а сдвиг не определен

1 Ответ

1 голос
/ 14 июля 2020

Вероятно, идея состоит в том, что вы используете коды ASCII вместо использования настраиваемого массива для алфавита, и в этом случае смещение значения 1 для 'a' равно 'b', а для «А» - это «В».

const caesar = function(string, shift) {
  return string.split('').map( letter => {
    if (!/[a-z0-9]+$/i.test(letter)) { // Do the shift only for numbers and letters
      return letter;
    } else {
      return String.fromCharCode( letter.charCodeAt(0) + shift ); // return ascii code + shift
    }
  }).join('');
}

console.log(caesar('abAB', 1));

console.log(caesar('Lorem Ipsum 5', 2));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...