Я писал программу, которая действовала бы как кодировщик Цезаря Шифра. Однако для ввода только одной буквы зашифрованный символ иногда возвращается вместе с символами нежелательной почты.
#include<stdio.h>
#include<cs50.h>
#include<string.h>
int check_validity(string);
int atoi(string);
void cipher(int ,string, int);
int main(int argc, string argv[])
{
if(argc == 2)
{
check_validity(argv[1]);
if(check_validity(argv[1]) == 0)
{
string c = get_string("plaintext: ");
int key = atoi(argv[1]);
int cipher_key = key%26;
int length = strlen(c);
cipher(cipher_key, c, length);
return 0;
}
else printf("Usage: ./caesar key\n");
}
else
{
printf("Usage: ./caesar key\n");
return 1;
}
}
int check_validity(string w)
{
int j = 0;
string a;
for(int i = 0;w[i] != 0; i++)
{
if(w[i]<47 || w[i]>58)
{
j++;
}
}
return j;
}
int atoi(string w)
{
int number = 0;
for (int i = 0; w[i] != 0; i++)
{
number = number*10 + (w[i]-'0');
}
return number;
}
void cipher(int x, string q, int l)
{
char b[l];
for(int i=0; q[i] != 0; i++)
{
if(q[i]>64 && q[i]<91)
{
if(q[i]<91-x)
{
b[i] = q[i] + x;
}
else b[i] = q[i] + x - 26;
}
else if(q[i]>96 && q[i]<123)
{
if(q[i]<123-x)
{
b[i] = q[i] + x;
}
else b[i] = q[i] + x - 26;
}
else b[i] = q[i];
}
printf("ciphertext: %s\n",b);
}
Ввод: ./caesar 1, открытый текст: a
Выход 1: b
Выход 2: b>
Выход 3: b2
При смене ключа возникает та же проблема. Однако, похоже, что это отсутствует для всех других введенных строк букв.