题目:小明同学最近开发了一个网站,在用户注册账户的时候,需要设置账户的密码,为了加强账户的安全性,小明对密码强度有一定要求
要求:
1. 密码只能由大写字母,小写字母,数字构成;
2. 密码不能以数字开头;
3. 密码中至少出现大写字母,小写字母和数字这三种字符类型中的两种;
4. 密码长度至少为8
细读完题目,我们可分别通过题目所给的要求编写代码,分析可以通过遍历输入的密码
其中:
遍历数组
for (int j = 0; arr[j] != '\0'; j++)
{
if (arr[j] >= '0' && arr[j] <= '9')
{
num++;
}
else if (arr[j] >= 'a' && arr[j] <= 'z')
{
min++;
}
else if (arr[j] >= 'A' && arr[j] <= 'Z')
{
max++;
}
else
{
count++;
}
}
1、密码不能以数字开头;
if (arr[0] >= '0' && arr[0] <= '9')
{
printf("NO\n");
continue;
}
2、密码只能由大写字母,小写字母,数字构成;
//判断密码只能是由数字、大写、小写组成
if (count != 0)
{
printf("NO\n");
continue;
}
3、 密码中至少出现大写字母,小写字母和数字这三种字符类型中的两种;
//判断密码至少有两位组成
if ((num > 0) + (min > 0) + (max > 0) < 2)
{
printf("NO\n");
continue;
}
密码长度至少为8
//判断密码长度不能 <8
if (num + min + max < 8)
{
printf("NO\n");
continue;
}
/*if (strlen(arr)<8)
{
priuntf("NO\n");
continue;
}*/
总代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
char arr[100] = { 0 };
scanf("%s", &arr);
int max = 0, min = 0, num = 0, count=0;
//判断密码开头不能为数字
if (arr[0] >= '0' && arr[0] <= '9')
{
printf("NO\n");
continue;
}
//计算密码的数字、大写、小写的个数
for (int j = 0; arr[j] != '\0'; j++)
{
if (arr[j] >= '0' && arr[j] <= '9')
{
num++;
}
else if (arr[j] >= 'a' && arr[j] <= 'z')
{
min++;
}
else if (arr[j] >= 'A' && arr[j] <= 'Z')
{
max++;
}
else
{
count++;
}
}
//判断密码只能是由数字、大写、小写组成
if (count != 0)
{
printf("NO\n");
continue;
}
//判断密码长度不能 <8
if (num + min + max < 8)
{
printf("NO\n");
continue;
}
/*if (strlen(arr)<8)
{
priuntf("NO\n");
continue;
}*/
//判断密码至少有两位组成
if ((num > 0) + (min > 0) + (max > 0) < 2)
{
printf("NO\n");
continue;
}
printf("YES\n");
}
return 0;
}