지금까지 우리 모두 알고 있듯이, 추측하기 쉽지 않은 비밀번호를 사용하는 것이 중요합니다! 이제 많은 웹 앱에는 알파벳 문자뿐만 아니라 숫자와 기호도 요구하는 비밀번호가 필요합니다.
이 실습에서는 사용자에게 비밀번호를 묻는 메시지가 표시되며, 비밀번호는 개발자가 완료하게 될 기능 검사를 통해 검증됩니다. 비밀번호에 하나 이상의 대문자, 하나의 소문자, 숫자 및 기호('!', '$' 및 '#'과 같이 문자나 숫자가 아닌 인쇄 가능한 문자를 의미함)가 포함된 경우 함수는 true를 반환해야 합니다. 그렇지 않은 경우 false를 반환해야 합니다.

함수는 인수로 제공된 비밀번호를 통해 반복됩니다. 적어도 하나의 소문자, 하나의 대문자, 하나의 숫자 및 하나의 기호를 찾아야 하므로 문자열을 반복하기 전에 각각에 대해 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;
}
}
