cs50 pset2 Vigenere密码

时间:2017-06-19 23:25:20

标签: c cs50 vigenere

我在问题集2中解决Vigenere密码遇到了困难。我差不多完成了。当我第一次使用明文./vigenere ABC运行命令HELLO时,它会给我写回答(密文):HFNLP。但是,当我使用明文./vigenere bacon执行Meet me at the park at eleven am时,它并没有给我正确答案。

代码:

int main(int argc, string argv[])
{
     string kword = argv[1];

    if(argc !=2)
    {
        printf("Usage: ./vigenere k \n");

        return 1;
    }
    else
    {
        for(int i = 0, n = strlen(kword); i<n; i++)
        {
            if(!isalpha(kword[i]))
             {
                printf("Usage: ./vigenere k \n");
                return 1;
             }
        }  

    }
    int keylen = strlen(kword);

     printf("Enter Plain Text:\n");

    string p = get_string();

      if (p != NULL)
      {
          for (int i = 0, j = 0, n = strlen(p); i<n; i++)

          {    
           if(isalpha(p[i]))
            {
                 if (islower(p[i]))
              {
                 printf("%c",((p[i] - 97) + (j % keylen) % 26) + 97);
                 j++;
              }
              else if (isupper(p[i]))
              {
                 printf("%c", ((p[i] - 65) + (j % keylen) % 26) + 65);
                j++;
              }

            }  
             else
              printf("%c", p[i]);

      }

    printf("\n");
}

 return 0; 
}

0 个答案:

没有答案