시저 텍스트 암호 솔루션 CS50 문제 세트 2

이번 주 문제 세트에서 저는 C로 만든 텍스트 암호 솔루션을 만들어야 했습니다. 이것은 큰 도전이었고 어레이 작업에 익숙해지고 ASCII 값 테스트를 통해 이 문제에 대한 올바른 솔루션을 찾기 전에 몇 가지 솔루션을 테스트하기 때문에 매우 재미있었습니다. .

C로 프로그래밍을 시작하고 이 문제에 대한 솔루션을 연구하고 있다면 여기에서 CS50 검사 명령을 통과한 솔루션을 만든 방법을 공유하고 있습니다.

시작하기 전에 다음 사항을 기억하십시오.
  • 모든 문자에는 ASCII 값이 있습니다
  • .
  • 이것은 솔루션 코딩을 시작하기 전에 살펴볼 좋은 예입니다.


  • 먼저 우리는 2개의 인자를 받는 메인 함수로 시작합니다. 첫 번째는 여러 개의 인자를 받고, 두 번째는 문자열 배열을 받습니다.

    int main(int argc, string argv[])
    


    그런 다음 사용자가 다시 프롬프트해야 하는 인수가 두 개 미만인지 또는 두 개 이상인지 확인해야 합니다. 사용자가 입력한 인수 중 하나가 알파인지 확인해야 하는 두 번째 확인은 알파가 아니면 사용자가 다시 요청해야 하는 경우 문자열을 반복하고 인수가 isalpha인지 확인하는 것입니다. .

    int main(int argc, string argv[])
    {
        if (argc != 2)
        {
            printf("Usage: ./ceasar k");
            return 1;
        }
    
        // checking if one of the arguments isalpha (we need an integer) - Looping through the string of integers
        for (int key = 0; key < strlen(argv[1]); key++)
        {
            if (isalpha(argv[1][key]))
            {
                printf("Usage: ./caesar key\n");
                return 1;
            }
        }
    


    이제 우리는 atoi라는 함수를 사용할 것입니다. atoi는 문자열을 받아서 그 문자열을 정수로 변환합니다. 그런 다음 사용자에게 일반 텍스트를 입력하도록 요청하고 일반 텍스트의 각 문자를 반복해야 합니다. 알파가 아니면 배열의 현재 요소를 인쇄할 것입니다.

     // iterates over the plain text with a for loop
        for (int i = 0, length = strlen(plaintext); i < length; i++)
        {
            if (!isalpha(plaintext[i]))
            {
                //prints the current element of the array if it's not alpha
                printf("%c", plaintext[i]);
                continue;
            }
    


    그런 다음 현재 문자가 대문자인지 확인하고 현재 요소가 소문자 "a"또는 대문자 "A"에서 얼마나 떨어져 있는지 계산합니다.

    마지막으로 우리에게 주어진 공식을 적용하여 암호화하려는 문자의 암호화 색인을 정확히 알 수 있고 최종 결과를 인쇄합니다.

     // index of the letter cyphering
            int ci = (pi + key) % 26;
    
            // printing the new character cyphered
            printf("%c", ci + offset);
        }
    
    
        printf("\n");
        return 0;
    


    이것이 도움이 되기를 바라며 항상 그렇듯이 전체 솔루션을 살펴보고 싶다면 아래에 남겨둡니다. 계속 코딩하고 계속 배우세요!

    #include <stdio.h>
    #include <cs50.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    
    
    // main function takes 2 arguments, first one takes number of arguments, and the second one takes an array of strings
    int main(int argc, string argv[])
    {
        if (argc != 2)
        {
            printf("Usage: ./ceasar k");
            return 1;
        }
    
        // checking if one of the arguments isalpha (we need an integer) - Looping through the string of integers
        for (int key = 0; key < strlen(argv[1]); key++)
        {
            if (isalpha(argv[1][key]))
            {
                printf("Usage: ./caesar key\n");
                return 1;
            }
        }
    
        int key = atoi(argv[1]) % 26; // converts the ASCII to an integer from "20" to 20 as an interger
    
        // takes the plaintext from the user
        string plaintext = get_string("plaintext: ");
    
        printf("ciphertext: ");
    
        // iterates over the plain text with a for loop
        for (int i = 0, length = strlen(plaintext); i < length; i++)
        {
            if (!isalpha(plaintext[i]))
            {
                //prints the current element of the array if it's not alpha
                printf("%c", plaintext[i]);
                continue;
            }
            // checking if the current element it's uppercase
            int offset = isupper(plaintext[i]) ? 65 : 97;
            // calculating how far the current element is from lowercase "a" or uppercase "A"
            int pi = plaintext[i] - offset;
            // index of the letter cyphering
            int ci = (pi + key) % 26;
    
            // printing the new character cyphered
            printf("%c", ci + offset);
        }
    
    
        printf("\n");
        return 0;
    
    
    }
    


    Github에서 저를 팔로우하고 LinkedIn에서 저와 연결하세요

    https://github.com/cesareuseche

    좋은 웹페이지 즐겨찾기