Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Подскажите как сделать чтобы пробел между словами не шифровался??? PHP

Антон Ненашев Ученик (129), открыт 3 недели назад
<?php

$text = 'caesar cipher';
$shift = 18;

$encryption = '';
$decryption = '';

for ($i = 0; $i < strlen($text); $i++) {
$symbol = ord($text[$i]) + $shift;
if ($symbol > 255) {
$symbol = $symbol - 255;
}
$encryption = $encryption.chr($symbol);
};

echo $encryption . PHP_EOL;

for ($i = 0; $i < strlen($encryption); $i++) {
$symbol = ord($encryption[$i]) - $shift;
if ($symbol < $shift) {
$symbol = 255 - $shift;
}
$decryption = $decryption.chr($symbol);
};

echo $decryption . PHP_EOL;
1 ответ
Евгений Платонов Мастер (1187) 3 недели назад
Чтобы пробелы между словами не шифровались, нужно проверять, является ли текущий символ пробелом. Если да, то не применять шифрование к нему. Вот исправленный код:

$text = 'caesar cipher';
$shift = 18;

$encryption = '';
$decryption = '';

for ($i = 0; $i < strlen($text); $i++) {
$symbol = ord($text[$i]);

// Если текущий символ не пробел, применяем шифрование
if ($symbol !== ord(' ')) {
$symbol += $shift;
if ($symbol > 255) {
$symbol -= 255;
}
}

$encryption .= chr($symbol);
};

echo $encryption . PHP_EOL;

for ($i = 0; $i < strlen($encryption); $i++) {
$symbol = ord($encryption[$i]);

// Если текущий символ не пробел, применяем дешифрование
if ($symbol !== ord(' ')) {
$symbol -= $shift;
if ($symbol < $shift) {
$symbol = 255 - $shift;
}
}

$decryption .= chr($symbol);
};

echo $decryption . PHP_EOL;

Теперь программа будет шифровать и дешифровать только символы, отличные от пробела.
Антон НенашевУченик (129) 3 недели назад
Спасибо!!!!!
Похожие вопросы