Предмет: Информатика, автор: tarabanovarseniy1eat

Решить только на С++
Шифр Цезаря
В шифре Цезаря каждый символ, являющийся буквой латинского алфавита, заменяется на другой символ, k-тый по счёту в алфавите после данного. Если этот символ выходит за границы, то берётся соответствующий из начала строки. Например, для k=3 символ A заменяется на D, символ B — на E, символ C — на F, ..., символ Z – на C. Аналогично, строчные буквы заменяются на строчные буквы. Все остальные символы не меняются.

Дана строка, зашифруйте её при помощи шифра Цезаря для k=3.

Входные данные

Дана строка из символов с ASCII кодами от 32 до 127 длиной не больше 10000 символов.

Выходные данные

Выведите ответ на задачу.

Примеры
Ввод
In a hole in the ground there lived a hobbit.
Вывод
Lq d kroh lq wkh jurxqg wkhuh olyhg d kreelw.


ismars: вы можете отметить мой ответ как лучший!

Ответы

Автор ответа: sabrina6815
0

Ответ:

#include <iostream>

#include <string>

#include <conio.h>

#include <stdlib.h>

#include <sstream>

#include <fstream>

using namespace std;

int main()

{

int k; //Переменная выбора - шифрование/дешифрование

int shift; //Величина сдвига

string result = ""; //Строка - результат

cout<<"Enter 1 for encryption and decryption of 2\n";

cin>>k;

switch (k) //Если k

{

case 1: //Если выбрано шифрование

{

cout<<"Enter value shift for encryption\n";

cin>>shift;

if (shift > 26)

shift = shift % 26; //Вычисление сдвига

cout<<"Read of file...\n";

setlocale(LC_ALL,"Russian");//Чтение файла

string s; //Строка считанная из файла

ifstream in("Test.txt");

getline(in,s);

cout<<"Text of file: \n"<<s<<endl;

in.close();

cout<<"Reading complete!\n";

cout<<"Encryption...\n";

for (int i = 0; i < s.length(); i++)

{

//Если не латиница

if (((int)(s[i]) < 65)||((int)(s[i]) > 122))

result += s[i];

//Если буква является строчной

if (((int)(s[i]) >= 97) && ((int)(s[i]) <= 122))

{

//Если буква, после сдвига выходит за пределы алфавита

if ((int)(s[i]) + shift > 122)

//Добавление в строку результатов символ

result += (char)((int)(s[i]) + shift - 26);

//Если буква может быть сдвинута в пределах алфавита

else

//Добавление в строку результатов символ

result += (char)((int)(s[i]) + shift);

}

//Если буква является прописной

if (((int)(s[i]) >= 65) && ((int)(s[i]) <= 90))

{

//Если буква, после сдвига выходит за пределы алфавита

if ((int)(s[i]) + shift > 90)

//Добавление в строку результатов символ

result += (char)((int)(s[i]) + shift - 26);

//Если буква может быть сдвинута в пределах алфавита

else

//Добавление в строку результатов символ

result += (char)((int)(s[i]) + shift);

}

}

cout<<"Encryption complete!\n";

cout<<"Result:\n";

cout<<result; //Вывод результата

break;

}

case 2: //Если выбрано дешифрование

{

cout<<"Enter value shift for decryption\n";

cin>>shift;

if (shift > 26)

shift = shift % 26;

cout<<"Read of file...\n";

setlocale(LC_ALL,"Russian");

string s;

ifstream in("Test.txt");

getline(in,s);

cout<<"Text of file: \n"<<s<<endl;

in.close();

cout<<"Reading complete!\n";

cout<<"Decryption...\n";

for (int i = 0; i < s.length(); i++)

{

//Если не латиница

if (((int)(s[i]) < 65)||((int)(s[i]) > 122))

result += s[i];

//Если буква является строчной

if (((int)(s[i]) >= 97) && ((int)(s[i]) <= 122))

{

//Если буква, после сдвига выходит за пределы алфавита

if ((int)(s[i]) - shift < 97)

//Добавление в строку результатов символ

result += (char)((int)(s[i]) - shift + 26);

//Если буква может быть сдвинута в пределах алфавита

else

//Добавление в строку результатов символ

result += (char)((int)(s[i]) - shift);

}

//Если буква является прописной

if (((int)(s[i]) >= 65) && ((int)(s[i]) <= 90))

{

//Если буква, после сдвига выходит за пределы алфавита

if ((int)(s[i]) - shift < 65)

//Добавление в строку результатов символ

result += (char)((int)(s[i]) - shift + 26);

//Если буква может быть сдвинута в пределах алфавита

else

//Добавление в строку результатов символ

result += (char)((int)(s[i]) - shift);

}

}

cout<<"Decryption complete!\n";

cout<<"Result:\n";

cout<<result; //Вывод результата

break;

}

default: //Если ошибочное значение

{

cout<<"Error value\n";

break;

}

}

getch();

return 0;

}

0


ismars: не работает на примере входных данных
ismars: выводит Error value
ismars: jq
ismars: ой
ismars: то есть пустую строку
Автор ответа: ismars
0

Ответ:

числа в if берутся из кодов ASCII

Объяснение:

#include <stdio.h>

#include <string.h>

int

main ()

{

 char s[10001];

 int i = 0;

 for (int j = 0; j < 10001; j++) {

     scanf("%c", &s[j]);

     if (s[j] == '\n')

         break;

 }

 while (s[i] != '\n')

   {

   if (((int)s[i] > 64 && (int)s[i] < 91) || ((int)s[i] > 96 && (int)s[i] < 123))

     if ((int)s[i] > 124)

s[i] = (char)((int)s[i] - 92); //3-127+32=92

else

       s[i] = (char)((int)s[i] + 3);

   i++;

   }

 for (int j = 0; j < i; j++)

     printf("%c", s[j]);

 return 0;

}

Похожие вопросы
Предмет: Русский язык, автор: ksyusha2б
Антарктида-самое холодное место мира.Вы думаете,что ни одно живое существо не может выжить в таком холоде?Ошибаетесь!Только здесь можно встретить удивительную птицу-императорского пингвина.В высоту она достигает метра и весит около 30 килограммов.Его оперение на спине чёрное,а на груди белое,что делает его в воде менее заметным для врагов.Под шеей и на щеках у него жёлто-оранжевая окраска.
Самка императорского пингвина производит на свет одно единственное яйцо.Через несколько часов она передаёт своё будущее чадо счастливому папе.А он спрячет своё яйцо под кожистой складкой на брюхе,там всегда тепло.Мамаша уходит в море добывать себе пропитание.Самец уже запасся толстым слоем жира и может выдержать самые суровые условия на всё время вынашивания яйца.Чтобы сократить расход энергии и сохранить тепло,самцы сбиваются в кучу,причём они периодически меняются местами,чтобы каждый мог получить сою долю тепла.Через два месяца птенец вылупиться.А заботливый папа потеряет к этому времени почти половину своего веса.По возвращению,приходит черёд мамы заботиться о малыше.А отец,передав самке своё чадо,отправляется в долгий путь к морю,за пропитанием (рыба,креветки,мелкие ракообразные-излюбленное их меню).
В два месяца пингвинята образуют свою колонию,(ясли).Они сбиваются в плотную кучу доя защиты от холода.Теперь только несколько взрослых пингвинов наблюдают за птенцами.А родители на конец могут передохнуть и вместе отправиться к морю.Путь предстоит долгий,по льду идти на коротеньких лапках ох как не легко,но императорский пингвин применяет одну уловку: он ложится на брюхо,и - вперёд.Так намного легче.
Добравшись до кромки льда,стая не спешит нырять.Здесь их может поджидать морской леопард - трёхметровый свирепый хищник,пингвины для которого - лакомая добыча. Помогите пожалуйста составить план текста