Кликните здесь для просмотра всего текста
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
| #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;
} |
|
Собственно интересует вот этот кусок:
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| 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);
}
} |
|
Не совсем понимаю, что означают условия, хотелось бы пояснения по поводу них, и откуда берутся "цифры": 26, 122, 97 и т.п.?