string text = GetString();
//enters length of argv string into q
//converts string argv[1] into string key
string key = argv[1];
int klen = strlen(key);
int kposition = 0;
//loop through the characters in array "text"
for (int tposition = 0, n = strlen(text); tposition < n; tposition ++)
{
if isupper(key[kposition])
{
key[kposition] = ((key[kposition] - 'A') % klen) + 'A';
}
else if islower(key[kposition])
{
key[kposition] = ((key[kposition] - 'a') % klen) + 'a';
}
//determine if character is alphabetical
if (isalpha(text[tposition]))
{
//encrypt upper case characters
if (isupper(text[tposition]))
{
//modulo magic to loop to beginning of alphabet after 'Z'
text[tposition] = (((text[tposition] - 'A') + key[kposition]) % 26) + 'A';
printf("%c", text[tposition]);
}
//encrypt lower case characters
else
{
//modulo magic to loop to beginning of alphabet after 'z'
text[tposition] = (((text[tposition] - 'a') + key[kposition]) % 26) + 'a';
printf("%c", text[tposition]);
}
}
//if the input isn't alphabetical, then just print the input (spaces)
else
{
printf("%c", text[tposition]);
}
kposition ++;
}
printf("\n");
return 0;
}инкремента и обертывание ключ
Я последовал вашему совету и сделали мои переменные немного более описательный, что помогает мне взглянуть на код.
Я все еще не получаю правильные выходные данные из своей программы, хотя он компилируется и работает нормально.
Например, когда я бегу: vigenere.c -bacon
и введите: «Встретимся в парке», я получаю: «Gxzq г-н п КИР Frea», вместо правильного ответа , который: «Negh zf av huf pcfx».
Таким образом, верхний/нижний регистр работает, а пробелы работают. Проблема заключается в приращении ключа [kposition]. Часть проблемы заключается в том, что я не интуитивно подействую по модулю очень хорошо, поэтому мне не ясно, что именно делает арифметика по модулю (кроме того, что она дает остаток от двух чисел).
Как я могу лучше расположить свой ключ [kposition] инкремент?
Благодарим за указателей, mksteve! разбивка переменных tkey и kposition сделала вещи намного яснее! – DavidH