시저 텍스트 암호 솔루션 CS50 문제 세트 2
4280 단어 cs50programmingchallengec
C로 프로그래밍을 시작하고 이 문제에 대한 솔루션을 연구하고 있다면 여기에서 CS50 검사 명령을 통과한 솔루션을 만든 방법을 공유하고 있습니다.
시작하기 전에 다음 사항을 기억하십시오.
먼저 우리는 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
Reference
이 문제에 관하여(시저 텍스트 암호 솔루션 CS50 문제 세트 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/cesareuseche/caesar-text-cipher-solution-cs50-problem-set-2-4j7m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)