参考代码如下:

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

int main(void)
{
	int M;
	scanf("%d", &M);
	
	int res[M];    //存放结果的数组 
	int index = 0; //数组下标
	
	char str[50];
	int i;
	for(i = 0; i < M; i++)
	{
		scanf("%s", str); 
		int len = strlen(str);
		
		if (len < 8 || len > 16)
		{
			res[index++] = 0;
		}
		else
		{
			int hasup  = 0;
			int haslow = 0;
			int hasnum = 0;
			int hasoth = 0;
			int j;
			for (j = 0; j < len; j++)
			{
				if (isupper(str[j]))
					hasup = 1;
				else if (islower(str[j]))
					haslow = 1;
				else if (isdigit(str[j]))
					hasnum = 1;
				else if (str[j] == '~' || str[j] == '!' || str[j] == '@' || str[j] == '#' || str[j] == '$' || str[j] == '%' || str[j] == '^')
					hasoth = 1;
			}
			
			//判断四类字符至少有三类,只要三个标志位总和大于等于3即可
			int hassum = hasup + haslow + hasnum + hasoth;
			if (hassum >= 3)
				res[index++] = 1;
			else
				res[index++] = 0;
		}	
		
		memset(str, 0, 50); //清空数组
	}
	
	//输出结果
	int k;
	for (k = 0; k < index; k++)
	{
		if (res[k] == 1)
			printf("YES\n");
		else
			printf("NO\n");
	}
	
	return 0;
}


点赞(1)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论