Я пытаюсь написать код, который будет брать каждое di git из ввода строки открытого текста и, если это буква, выводить другую букву, как определено ключом подстановки (26-буквенный ключ).
Другими словами, если алфавит был «abcd», а предоставленный ключ был «hjkl», при вводе «bad» будет выведено «jhl».
// Regular alphabet is to be used as comparison base for key indexes //
string alphabet = "abcdefghijklmnopqrstuvwxyz";
// Prompt user for input and assign it to plaintext variable //
string plaintext = get_string("plaintext: ");
Не буквы должны быть напечатано как есть.
Моя идея заключалась в том, чтобы l oop вводить di git через каждый индекс в алфавите, ища соответствующую букву, и, если она найдена, вывести тот же индексный символ из строки. (сбивает с толку, я думаю)
Этот l oop, однако, возвращает segfault, когда я запускаю его, но не при отладке:
// Loop will iterate through every ith digit in plaintext and operate the cipher //
for (int i = 0; plaintext[i] != '\0'; i++) {
// Storing plaintext digit in n and converting char to string //
char n[2] = "";
n[0] = plaintext[i];
n[1] = '\0';
// If digit is alphabetic, operate cipher case-sensitive; if not, print as-is //
if (isalpha(n) != 0) {
for (int k = 0; alphabet[k] != '\0'; k++) {
char j[2] = "";
j[0] = alphabet[k];
j[1] = '\0';
if (n[0] == j[0] || n[0] == toupper(j[0])) {
if (islower(n) != 0) {
printf("%c", key[k]);
break;
} else {
printf("%c", key[k] + 32);
break;
}
}
}
} else {
printf("%c", (char) n);
}
}
Что не так? Я искал помощь в Интернете, но большинство источников не очень удобны для начинающих.