【每日一题】——密码检查

文章描述了一个编程问题,要求编写程序判断用户输入的密码是否符合特定的安全规则,如长度、字符类型和开头字符等。程序通过嵌套判断语句检查密码是否由大写字母、小写字母和数字组成,且满足其他安全条件。对于每个输入的密码,程序会输出YES(合法)或NO(不合法)。
摘要由CSDN通过智能技术生成

一.题目描述

小明同学最近开发了一个网站,在用户注册账户的时候,需要设置账户的密码,为了加强账户的安全性,小明对密码强度有一定要求:

  1. 密码只能由大写字母,小写字母,数字构成;
  2. 密码不能以数字开头;
  3. 密码中至少出现大写字母,小写字母和数字这三种字符类型中的两种;
  4. 密码长度至少为8
    现在小明受到了n个密码,他想请你写程序判断这些密码中哪些是合适的,哪些是不合法的。

输入描述:
输入一个数n,接下来有n(n≤100)行,每行一个字符串,表示一个密码,输入保证字符串中只出现大写字母,小写字母和数字,字符串长度不超过100。

输出描述: 输入n行,如果密码合法,输出YES,不合法输出NO

二.思路分析

1.该题的主要难点在于判断语句该如何嵌套合理嵌套以及如何判断密码是否符合要求
2.首先嵌套的思路应该将不相关的两个合成一个,如要求2和要求4
3.其次再考虑条件之间的包含关系,如要求1和要求3哪一个包含哪一个
4.然后如何表示字母和数字呢,因为这里输入的是一串密码,因此应该用数组来接收,再因为既包含了字母也包含了数字,所以要用字符型
5.题目中说到是输入n个密码,所以是循环输入
6.还有一个难点就是中途判断出结果如何结束本次循环进入下一个循环

三.代码展示

#include<stdio.h>
#include<string.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	int j = 0;
	char arr[100];
	for (i = 0; i < n; i++)//输入多组密码
	{
		scanf("%s", arr);
		int flag[3] = { '\0' };
		int a = 0;
		if (arr[0] >= '1' && arr[0] <= '9' || strlen(arr) < 8)//判断密码长度是否大于8以及密码是否以数字开头
		{
			printf("NO\n");
			continue;//结束本次循环
		}
		for (j = 0; j < strlen(arr); j++)
		{
			if (arr[j] >= '0' && arr[j] <= '9' || arr[j] >= 'A' && arr[j] <= 'Z' || arr[j] >= 'a' && arr[j] <= 'z')//判断密码是否由数字、大写字母、小写字母组成
			{
				if (arr[j] >= '0' && arr[j] <= '9')
				{
					flag[0] = 1;
				}
				if (arr[j] >= 'A' && arr[j] <= 'Z')
				{
					flag[1] = 1;
				}
				if (arr[j] >= 'a' && arr[j] <= 'z')
				{
					flag[2] = 1;
				}
			}
			else
			{
				printf("NO\n");
				a = 1;
				break;
			}
		}
		if (a == 0)
		{
			if (flag[0] + flag[1] + flag[2] >= 2)//判断密码是否包含三种组成部分中的两种
			{
				printf("YES\n");
				continue;
			}
			else
			{
				printf("NO\n");
				continue;
			}
		}
	}
	return 0;
}

最后:

每日一题系列旨在养成刷题的习惯,所以对代码的解释并不会特别详细,但足够引导大家写出来,选的题目都不会特别难,但也不是特别简单,比较考验大家的基础和应用能力,我希望能够将这个系列一直写下去,也希望大家能够和我一起坚持每天写代码。

在这里送大家一句话:广积粮,缓称王!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PH_modest

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值