CS50 2019 Vigenere - вторая петля - PullRequest
0 голосов
/ 05 марта 2020

Сначала я получил свой код, чтобы сделать следующее:

ключ: ab Открытый текст: проверить меня Зашифрованный текст: Tfsu ne

Я, конечно, пытаюсь получить свой ключ, чтобы пропустить место, (Tfsu mf), поэтому я попытался добавить дополнительный счетчик (m-counter) для моего ключа, чтобы убедиться, что он не увеличивается после каждой итерации по открытому тексту. В результате, однако, теперь я получаю:

ключ: ab Открытый текст: проверьте меня Зашифрованный текст: Uftu nf

Так что теперь он действует так, как будто мой ключ - bb.

Может ли кто-нибудь объяснить 'logi c', почему этот второй l oop вызывает это изменение в выводе, вместо того, чтобы увеличиваться только тогда, когда символ будет зашифрован (т.е. является алфавитом c)?

            for (int m = 0; m<l; m++)
                {
                   for(int e = 0; e<z; e++)
                       {
                          if (islower(plaintext[e]))
                           {                                         
                           ciphertext [e] = (plaintext [e] + shift `(argv[1][m%l]) - 'a') %26 + 'a';`
                            }
                           if (isupper(plaintext[e]))
                            {    

                            ciphertext [e] = (plaintext [e] + shift (argv[1][m%l]) - 'A') %26 + 'A';      
                            }  
                       }
                 }

             for (int q = 0; q<z;q++)
                  {          
                     if (!isalpha(plaintext[q]) )
                          {    
                           ciphertext [q] = (plaintext [q]);
                           } 
                  } 


printf ("ciphertext: ");
for (int i = 0; i<z; i++)   
    { 
    printf ("%c", ciphertext [i]);
    }
 printf("\n");

1 Ответ

1 голос
/ 06 марта 2020

Этот l oop for (int m = 0; m<l; m++) говорит программе зашифровать весь простой текст с ключом [0], а затем зашифровать весь открытый текст с ключом [1], et c через l. Это точно описывает результат, который вы видите (ie выглядит так, как будто он шифруется с помощью "bb", потому что это действительно так!)

Как правило, в этом назначении не следует использовать al oop для управления ключом индекс. Это должно быть увеличено при использовании (и, конечно, "обернуть" на длину).

...