С++
Закодируйте фразу 'Съешь же ещё этих мягких французских булок, да выпей чаю' с помощью шифра Цезаря. Со сдвигом на 7.
Ответы
Ответ дал:
0
Dec C++
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
setlocale (LC_CTYPE, "Russian");
char alpha[] = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
char buff[]="Съешь же ещё этих мягких французских булок, да выпей чаю.";
int n = 66, k=7;
k %= n;
for (int i = 0; i < sizeof(buff)-1; ++i)
if (strchr(alpha,buff[i]))
buff[i] = alpha[(strchr(alpha,buff[i])-alpha+k) % n];
cout<<buff<<endl;
system("pause");
return 0;
}
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
setlocale (LC_CTYPE, "Russian");
char alpha[] = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
char buff[]="Съешь же ещё этих мягких французских булок, да выпей чаю.";
int n = 66, k=7;
k %= n;
for (int i = 0; i < sizeof(buff)-1; ++i)
if (strchr(alpha,buff[i]))
buff[i] = alpha[(strchr(alpha,buff[i])-alpha+k) % n];
cout<<buff<<endl;
system("pause");
return 0;
}
Ответ дал:
0
Можете объяснить вот этот кусок for (int i = 0; i < sizeof(buff)-1; ++i)
if (strchr(alpha,buff[i]))
buff[i] = alpha[(strchr(alpha,buff[i])-alpha+k) % n]; ?
if (strchr(alpha,buff[i]))
buff[i] = alpha[(strchr(alpha,buff[i])-alpha+k) % n]; ?
Ответ дал:
0
Функция strchr() выполняет поиск первого вхождения символа в строку, т.е. в строке alpha ищется очередной (i-ый) символ заданной строки buff. Если символ найден, т.е. если проверяемый символ - русская буква, то из строки alpha берётся символ, номер которого на k больше, чем номер текущего символа.
Ответ дал:
0
Если при сложении получается значение >= 66 (= числу символов в alpha), то номер определяется как остаток от деления полученного значения на 66. Например, для буквы "ю": 64+7 = 71, 71 % 66 = 5. Таким образом, буква "ю" заменяется на 5-ый символ строки alpha, т.е. на "Е".
Вас заинтересует
1 год назад
1 год назад
2 года назад
8 лет назад
8 лет назад