C/C++

Решить задачу в С (СИ)

Дано зашифрованное предложение и кодовое смещение K (0 < K < 10). Шифрование выполнено путем циклической замены каждой буквы в исходной строке на букву того же регистра, расположенную в алфавите на K-й позиции после шифруемой буквы (например, для K = 2 «A» перейдет в «C», «a» — в «c», «B» — в «D», «z» — в «b» и т. д.). Расшифровать предложение.
#include <stdio.h>

int little(const char c)
{
return c >= 'a' && c <= 'z';
}

int big(const char c)
{
return c >= 'A' && c <= 'Z';
}

int little_to_right(char * c, int K)
{
if(K < 0 || !little(*c)) return 0;
(*c) += K;
while((*c) > 'z') (*c) -= 26;
return 1;
}

int little_to_left(char * c, int K)
{
if(K > 0 || !little(*c)) return 0;
(*c) += K;
while((*c) < 'a') (*c) += 26;
return 0;
}

int big_to_right(char * c, int K)
{
if(K < 0 || !big(*c)) return 0;
(*c) += K;
while((*c) > 'Z') (*c) -= 26;
return 1;
}

int big_to_left(char * c, int K)
{
if(K > 0 || !big(*c)) return 0;
(*c) += K;
while((*c) < 'A') (*c) += 26;
return 0;
}

void deshifr(char * str, int K)
{
int i = 0;
if(K > 0)
{
while(str[i])
{
if(little(str[i])) little_to_right(&(str[i]),K);
else if(big(str[i])) big_to_right(&(str[i]),K);
i++;
}
}
else if(K < 0)
{
while(str[i])
{
if(little(str[i])) little_to_left(&(str[i]),K);
else if(big(str[i])) big_to_left(&(str[i]),K);
i++;
}
}
}

void shifr(char * str, int K)
{
int i = 0;
K *= -1;
deshifr(str,K);
}

int main()
{
const int size = 500;
char fraza[size];
printf("Введите шифрованную фразу: ");
fgets(fraza,size,stdin);
int K;
printf("K = ");
scanf("%d",&K);
deshifr(fraza,K);
printf("После расшифровки:\n %s",fraza);
return 0;
}

// Пример работы программы:
Введите шифрованную фразу: Vgzsviym Nzmbzzqdxc Kpncfdi. Kjzudev Mjnndd!
K = 5
После расшифровки:
Alexandr Sergeevich Pushkin. Poezija Rossii!

// Ниже я изменил функцию main, чтобы K было в заданном диапазоне
Виктор М. Ким
Виктор М. Ким
81 095
Лучший ответ
Виктор М. Ким #include <stdio.h>

int little(const char c)
{
return c >= 'a' && c <= 'z';
}

int big(const char c)
{
return c >= 'A' && c <= 'Z';
}

int little_to_right(char * c, int K)
{
if(K < 0 || !little(*c)) return 0;
(*c) += K;
while((*c) > 'z') (*c) -= 26;
return 1;
}

int little_to_left(char * c, int K)
{
if(K > 0 || !little(*c)) return 0;
(*c) += K;
while((*c) < 'a') (*c) += 26;
return 0;
}

int big_to_right(char * c, int K)
{
if(K < 0 || !big(*c)) return 0;
(*c) += K;
while((*c) > 'Z') (*c) -= 26;
return 1;
}

int big_to_left(char * c, int K)
{
if(K > 0 || !big(*c)) return 0;
(*c) += K;
while((*c) < 'A') (*c) += 26;
return 0;
}