Vigenere Cypher - Код не работает, как я ожидаю - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь выяснить, почему мой код не повторяется правильно по z.Я хотел бы повторять каждый 1 z, но кажется, что это немного случайно.У кого-нибудь есть предложения, как мне это сделать?Если что-то еще я делаю не так, пожалуйста, дайте мне знать.Я думаю, что я действительно близко.Мне также любопытно, как я блокирую пробелы / другие символы от шифрования.

#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int shift(char c);
int main(int argc, string argv[])
{
// Check to see if two arguments are enterted at launch 
int cipher = 0;
 if (argc != 2)
 {
    // If not return error & return 0
    printf("Usage: ./vigenere keyword \n");
    return 1;
 }
 else
 {
    int strlength = strlen(argv[1]);
    // Iterates through characters in second argument (key), checking to see 
    if they are digits
    for (int k = 0; k < strlength; k++)
    {
        if (isdigit(argv[1][k]))
        {
            // If not return error & return 1
            printf("Usage: ./vigenere keyword\n");
            return 2;
        }
     }
        //char *c =argv[1];
        string plaintext = get_string("Plaintext: ");
        int len = (int) strlen(plaintext);
        //int b = atoi(c);
        //char code[len];
        //strcpy (code, plaintext);
         int z=0;
         for (int j = 0; j < len; j++)   
         {

                int key = shift(argv[1][z]);
             //printf("%i",z);
              if (isupper(argv[1][z]))
                {
                  //printf("theory\n");
                  cipher = ((((plaintext[j] - 'A') + key) + 'A'));
                  //cipher = ((((plaintext[j] - 'A') + key) % 26) + 'A');
                  //printf("%c", (((plaintext[j] - 'A') + key) % 26) + 'A');
                 //printf("%i",z);


                  printf("%c",cipher);

                 }

                 if (islower(argv[1][z]))
                    {

                    //printf("theory\n");  
                    cipher = (((plaintext[j] - 'a') + key) + 'a');


                     //printf("%i",z);

                      printf("%c",cipher);  


                  }
                  //z++;     
                 //else if (!isalpha(plaintext[j]))
                    //{
                        //printf("%c", plaintext[j]);  
                     //}

                  if (z > strlen(argv[1])-1)
                 {
                          z=0;
                 }

                /* else 
                 {
                 z++;
                 }

                 else
                 {
                 z++;
                 }
                 */
                 //z++;
              }



            printf("\n");

             }
}
 int shift(char c)
 {
    int i = c;
    if (i <= 'Z' && i >= 'A')
    {
       return ((i - 'A') % 26);
    }
    else
    {
        return ((i - 'a') % 26);
    }

 }
...