c_cpp CS50 vigenere.c

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp CS50 vigenere.c相关的知识,希望对你有一定的参考价值。

/**
 * Eugenio Streliaev Filho
 * geninhofloripa@hotmail.com
 * vigenere.c
 */

#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

int main(int argc, string argv[])
{
    if (argc != 2)
    {
        printf("usage: ./vigenere k\n");
        return 1;
    }
    
    for (int i = 0, n = strlen(argv[1]); i < n; i++)
    {
        
        if (!isalpha(argv[1][i]))
        {
            printf("usage: ./vigenere k\n");
            return 1;
        }
    }

    printf("plaintext: ");
    string p = get_string();

    int text_size = strlen(p);
    int k_size = strlen(argv[1]);
    
    printf("ciphertext: ");
    
    for (int i = 0, j = 0; i < text_size; i++)
    {
        if (isalpha(p[i]))  
        {
            if (isupper(p[i]))
            {
                if (isupper(argv[1][j]))
                {
                    printf("%c", 'A' + ((p[i] - 'A') + (argv[1][j % k_size] - 'A')) % 26);
                    j++;                                                          
                }
                else
                {
                    printf("%c", 'A' + ((p[i] - 'A') + (argv[1][j % k_size] - 'a')) % 26);
                    j++;                                                                          
                }
            }
            else
            {
                if (isupper(argv[1][i]))
                {
                    printf("%c", 'a' + ((p[i] - 'a') + (argv[1][j % k_size] - 'A')) % 26);
                    j++;                                                                           
                }
                else
                {
                    printf("%c", 'a' + ((p[i] - 'a') + (argv[1][j % k_size] - 'a')) % 26);
                    j++;                                                                           
                }
            }
        }
        else
        {
            printf("%c", p[i]);
        }
    }

    printf("\n");
    return 0;
}

以上是关于c_cpp CS50 vigenere.c的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 vigenere.c 不工作?

c_cpp conditions.c#CS50

c_cpp answer.c#CS50

c_cpp C语言-CS520

c_cpp cs_stepper_01.ino

Vigenere密码[关闭]