Я пытаюсь сделать шифр vigenere. Информация о нем: https://www.youtube.com/watch?v=9zASwVoshiM Мой код, похоже, не работает для нескольких случаев. Мой код указан ниже, пожалуйста, не отправляйте мне ссылку, как сделать шифр vigenere, а вместо этого - способ исправить мою. Если я ставлю ключ как z, например, значение 25 соответствует алфавиту. Теперь, если я ставил зашифрованный текст как c, который равен 2, новый текст имеет значение 27 и должен показывать b, но для меня это не так. Поэтому, если значение превышает 25, оно не показывает, что я хочу, чтобы он работал. И для фактического вывода, например: аб как ключ следует изменить са к CbVigenere Cipher In C не работает
#include<stdio.h>
#include<cs50.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
int main(int argc , string argv[]){
//string plaintext;
string key;
if(argc != 2){
printf("Please run the programme again this time using a command line argument!\n");
return 1;
}
key = argv[1];
int keys[strlen(key)];
for(int m = 0; m< strlen(key);m++){
if(isalpha(key[m])==false){
printf("Re-Run The programme without any symbols.\n");
return 1;
}
}
for(int b = 0; b < strlen(key);b++){
if(isupper(key[b]) == false){
keys[b] = key[b] - 'a';
}
else{
keys[b] = key[b] - 'A';
}
}
//printf("Enter a string which should be encrypted: \n");
string plaintext = GetString();
int plength = strlen(plaintext);
int klength = strlen(key);
string ciphertext = key;
for(int u = 0; u<plength;u++){
if(isalpha(plaintext[u])==false){
printf("%c",plaintext[u]);
continue;
}
int value = u % klength;
ciphertext[u] = (keys[value] + plaintext[u]);
//By the more than 90 I am referring to 'z'
if(ciphertext[u]>90){
ciphertext[u] = ciphertext[u] ;
}
printf("%c",ciphertext[u]);
}
printf("\n");
return 0;
}
Thanks Калян
Ваше форматирование/углубление требует внимания. –
Вам нужно показать нам ввод, ожидаемый вывод и фактический вывод. Существует множество других вопросов о шифрах Vigenere здесь на SO - некоторые из них перечислены в разделе «связанных» вопросов справа от страницы - и есть вероятность, что один из них объяснит вашу проблему. (Ваша строка 'if (ciphertext [u]> 90) {' не следует использовать '90', предположительно вы ссылаетесь на' 'Z''.) –
Обратите внимание, что код символа для строчной буквы z равен 122 в ASCII и связанных наборах кодов (таких как CP 1252, 8859-1, 8859-15 и Unicode); буква верхнего регистра Z равна 90. Пожалуйста, обновите вопрос дополнительной информацией, такой как ключ, который вызывает проблемы, данные ввода образца, фактические выходные данные (нам не нужно будет компилировать ваш код, чтобы узнать, что вы видите, а не потому что мы можем не видеть, что вы видите, поскольку у нас разные компьютеры) и желаемые выходные данные. Затем удалите комментарии, которые вы сделали до сих пор. Когда это ваш вопрос, разъяснения идут в вопросе, а не в комментариях. –