С++
Закодируйте фразу 'Съешь же ещё этих мягких французских булок, да выпей чаю' с помощью шифра Цезаря. Со сдвигом на 7.

Ответы

Ответ дал: petyaGavrikov
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;
}
Ответ дал: galinacyzz
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]; ?
Ответ дал: petyaGavrikov
0
Функция strchr() выполняет поиск первого вхождения символа в строку, т.е. в строке alpha ищется очередной (i-ый) символ заданной строки buff. Если символ найден, т.е. если проверяемый символ - русская буква, то из строки alpha берётся символ, номер которого на k больше, чем номер текущего символа.
Ответ дал: petyaGavrikov
0
Если при сложении получается значение >= 66 (= числу символов в alpha), то номер определяется как остаток от деления полученного значения на 66. Например, для буквы "ю": 64+7 = 71, 71 % 66 = 5. Таким образом, буква "ю" заменяется на 5-ый символ строки alpha, т.е. на "Е".
Вас заинтересует