[This is CS50 2024] After Week2 - 배열 #Password

moonstrnck·2024년 1월 25일

CS50

목록 보기
6/13


[CS50 Practice - #Password]

Password

Learning Goals

  • 문자열 반복 연습
  • ctype 라이브러리 사용 연습
  • Boolean 변수 사용 연습

Background

지금까지 우리 모두 알고 있듯이, 추측하기 쉽지 않은 비밀번호를 사용하는 것이 중요합니다! 이제 많은 웹 앱에는 알파벳 문자뿐만 아니라 숫자와 기호도 요구하는 비밀번호가 필요합니다.

이 실습에서는 사용자에게 비밀번호를 묻는 메시지가 표시되며, 비밀번호는 개발자가 완료하게 될 기능 검사를 통해 검증됩니다. 비밀번호에 하나 이상의 대문자, 하나의 소문자, 숫자 및 기호('!', '$' 및 '#'과 같이 문자나 숫자가 아닌 인쇄 가능한 문자를 의미함)가 포함된 경우 함수는 true를 반환해야 합니다. 그렇지 않은 경우 false를 반환해야 합니다.

Demo

Getting Started

  1. GitHub 계정을 사용하여 cs50.dev에 로그인합니다.
  2. 터미널 창 내부를 클릭하고 cd를 실행합니다.
  3. $ 프롬프트에서 mkdir password를 입력합니다.
  4. cd password 를 실행하세요.
  5. 그런 다음 wget https://cdn.cs50.net/2022/fall/labs/2/password.c 를 터미널에 복사하여 붙여넣어 이 실습의 배포 코드를 다운로드하세요.
  6. 비밀번호가 모든 기준을 충족하면 true를 반환하고 그렇지 않으면 false를 반환하는 valid 함수를 완료해야 합니다.

Implementation Details

함수는 인수로 제공된 비밀번호를 통해 반복됩니다. 적어도 하나의 소문자, 하나의 대문자, 하나의 숫자 및 하나의 기호를 찾아야 하므로 문자열을 반복하기 전에 각각에 대해 Boolean 변수를 만들고 각각을 false로 설정하는 것이 좋습니다. 예를 들어 숫자를 찾으면 해당 부울을 true로 설정할 수 있습니다. 함수 끝에서 모든 부울 값이 true이면 모든 기준이 충족되었음을 의미하며 true를 반환합니다.

생각해보기

인쇄 가능한 95개의 ASCII 문자를 사용할 수 있는 8자 길이의 비밀번호를 몇 개나 만들 수 있다고 생각하시나요?

나의 풀이

// Check that a password has at least one lowercase letter, uppercase letter, number and symbol
// Practice iterating through a string
// Practice using the ctype library

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

bool valid(string password);

int main(void)
{
    string password = get_string("Enter your password: ");
    if (valid(password))
    {
        printf("Your password is valid!\n");
    }
    else
    {
        printf("Your password needs at least one uppercase letter, lowercase letter, number and symbol\n");
    }
}

// TODO: Complete the Boolean function below
bool valid(string password)
{
    bool upper = false;
    bool lower = false;
    bool number = false;
    bool symbol = false;

    for (int i = 0, n = strlen(password); i < n; i++)
    {

        if (isupper(password[i]) != 0)
        {
            upper = true;
        }
        else if (islower(password[i]) != 0)
        {
            lower = true;
        }
        else if (isdigit(password[i]) != 0)
        {
            number = true;
        }
        else if (isgraph(password[i]) != 0)
        {
            symbol = true;
        }
    }

    if (upper && lower && number && symbol)
    {
        return true;
    }
    else
    {
        return false;
    }
}

0개의 댓글