描述
小明同学最近开发了一个网站,在用户注册账户的时候,需要设置账户的密码,为了加强账户的安全性,小明对密码强度有一定要求:
1. 密码只能由大写字母,小写字母,数字构成;
2. 密码不能以数字开头;
3. 密码中至少出现大写字母,小写字母和数字这三种字符类型中的两种;
4. 密码长度至少为8
现在小明受到了n个密码,他想请你写程序判断这些密码中哪些是合适的,哪些是不合法的。
输入描述:
输入一个数n,接下来有n(n≤100)行,每行一个字符串,表示一个密码,输入保证字符串中只出现大写字母,小写字母和数字,字符串长度不超过100。
输出描述:
输入n行,如果密码合法,输出YES,不合法输出NO
思路:
首先创建一个数组名为password,这道题只需将字符串从头到尾每一种字符分别统计后,然后逐个判断是否符合条件
1.长度不小于8,即strlen(password)<8
2.不以数字开头。即password[0]>'0' && password[0]<'9'
3.定义lower,upper,digit来统计各种字符个数,大写、小写、数字必须两种以上
(upper>0)+(lower>0)+(digit>0)<2
#include<stdio.h>
#include<string.h>
int main()
{
int n = 0;
while (~scanf_s("%d", &n))
{
for (int i = 0; i < n; i++)
{
int lower = 0, higher = 0, digit = 0, other = 0;
char arr[101] = { 0 };
scanf_s("%s", &arr);
if (strlen(arr) < 8)
{
printf("NO\n");
continue;
}
if (arr[0] >= '0' && arr[0] <= '9')
{
printf("NO/n");
continue;
}
for (int i = 0; arr[i] != '\0'; i++)
{
if (arr[i] >= '0' && arr[i] <= '9')
digit++;//数字
else if (arr[i] >= 'a' && arr[i] <= 'z')
lower++;//小写字母
else if (arr[i] >= 'A' && arr[i] <= 'Z')
higher++;//大写字母
else
other++;
}
if (other != 0)
{
printf("NO\n");
continue;
}
if ((lower > 0) + (higher > 0) + (digit > 0) < 2)
{
printf("NO\n");
continue;
}//密码只有1种字符
printf("YES\n");
}
}
return 0;
}