【C语言数据结构】加强密码(字符串)

题目描述:

很多网站初始密码都是“123456”,为保障账号安全,第一次登录会强制修改密码为加强密码,已知某网站加强密码需要同时满足以下规定:长度为6-16;必须同时包含大写字母、小写字符、数字和特殊符号;首位必须为大写字母。

请你编写一个程序,判断用户设置的密码是否为加强密码。

输入格式:

输入第一行为一个整数T(1<=T<=20),代表测试数据的组数,随后T行,每行都是由小写字母、大写字母、数字、特殊符号组成的一串字符s,长度不超过20,特殊符号有且仅有@、#、$、%、^、&、*。

输出格式:

输出每行字符串是否为加强密码,是,输出“Yes”,不是,输出“No”,每组输出占一行。

输入样例:

4
Ab12~
Hello123@
abc#123
good$666

输出样例:

No
Yes
No
No

参考答案如下:

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

void judge(char* ch) 
{  
	int len = strlen(ch);  
	int hasUpper = 0, hasLower = 0, hasDigit = 0, hasSpecial = 0;  
	if (len < 6 || len > 16)
	{  
		printf("No\n");  
		return;  
	}  
	if (isupper(ch[0]))
	{  
		hasUpper = 1;  
	}  
	for (int i = 0; i < len; i++) 
	{  
		if (islower(ch[i])) 
		{  
			hasLower = 1;  
		} else if (isdigit(ch[i]))
		{  
			hasDigit = 1;  
		} 
		else if (ch[i] == '@' || ch[i] == '#' || ch[i] == '$' || ch[i] == '%' || ch[i] == '^' || ch[i] == '&' || ch[i] == '*') 
		{  
			hasSpecial = 1;  
		}  
	}  
	
	if (hasUpper && hasLower && hasDigit && hasSpecial) 
	{  
		printf("Yes\n");  
	} 
	else 
	{  
		printf("No\n");  
	}  
}  

int main() 
{  
	int T;  
	scanf("%d", &T);  
	getchar(); // Consume the newline character  ,it's important.
	for (int i = 0; i < T; i++) 
	{  
		char ch[21]; // Increased the size to 21 to include the null terminator  
		fgets(ch, sizeof(ch), stdin);  
		judge(ch);  
	}  
	
	return 0;  
}

NO.30

<C语言数据结构>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

木鳶戾天

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

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

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

打赏作者

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

抵扣说明:

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

余额充值