#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)
cout<<"Encryption complete!\n";
cout<<"Result:\n";
cout<<result; //Вывод результата
break;
case 2: //Если выбрано дешифрование
cout<<"Enter value shift for decryption\n";
shift = shift % 26;
setlocale(LC_ALL,"Russian");
string s;
cout<<"Decryption...\n";
if ((int)(s[i]) - shift < 97)
result += (char)((int)(s[i]) - shift + 26);
result += (char)((int)(s[i]) - shift);
if ((int)(s[i]) - shift < 65)
cout<<"Decryption complete!\n";
default: //Если ошибочное значение
cout<<"Error value\n";
getch();
return 0;
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')
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
s[i] = (char)((int)s[i] + 3);
i++;
for (int j = 0; j < i; j++)
printf("%c", s[j]);
#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
числа в 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;
}