Прежде всего не существует один, что я могу задать такой вопрос так не простите пожалуйста мнеVigenere Cipher - Формула Объяснение
#include <stdio.h>
#include <cs50.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(int argc, string argv[]) {
string key = argv[1];
int l = strlen(argv[1]);
if (argc != 2) {
return 0;
}
for (int i = 0, n = strlen(key); i < n; i++) {
if (!isalpha(key[i])) {
return 0;
}
key[i] = tolower(key[i]);
key[i] = key[i] - 97;
}
string txt = GetString();
for (int k = 0, p = strlen(txt); k < p; k++) {
if (isalpha(txt[k])) {
if (isupper(txt[k])) {
printf("%c", (((txt[k] - 65) + (key[k % l])) % 26 + 65));
}
if (islower(txt[k])) {
printf("%c", (((txt[k] - 97) + (key[k % l])) % 26 + 97));
}
} else
if (!isalpha(txt[k])) {
printf("%c", txt[k]);
}
}
printf("\n");
return 0;
}
Я совсем не могу получить эти 2 строки кода
key[i] = key[i] - 97;
printf("%c", (((txt[k] - 97) + (key[k % l])) % 26 + 97));
Есть ли легкое объяснение, почему мы использовали первый и как работает второй?
Вы можете проверить [ASCII код 97] (http://www.theasciicode.com.ar/ascii-printable-characters/lowercase- letter-a-minuscule-ascii-code-97.html), который кажется «a». И 26 может иметь какое-то отношение к числу символов в алфавите. –