Вы должны break;
из внутреннего цикла после того, как совпадение найдено, иначе буква может быть заменена снова.Предположим, что декодирующие массивы имеют вид
char array1[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ .";
char array2[] = " .QWERTYUIOPASDFGHJKLZXCVBNM";
. Когда декодируется буква 'C'
, она становится 'Q'
, но если вы не вырвитесь из внутреннего цикла, 'Q'
будет снова декодирован.до 'G'
.Я предлагаю
int decrypt(char *letters, char *array1, char *array2, int count)
{
int i, j;
for(i = 0; i < count; i++)
{
for(j = 0; j < 28; j++)
{
if(letters[i] == array1[j])
{
letters[i] = array2[j];
break; // added here
}
}
}
printf("The decrypted message is: %s\n", letters);
}
Обратите внимание, что если входное сообщение содержит строчные буквы, они должны быть обнаружены, преобразованы в верхний регистр, декодированы и преобразованы обратно в строчные.