【每日一题】密码,特殊符号,动态数组

特殊字符包括:~  `  !  @  #  $  %  ^  &  *  ( )  _  -  +  =  |  \  { }  [ ]  :  ;  “  ‘  < >  ,  .  ?  /  

特殊符号的输出,要在要输出的特殊符号前加上反斜杠  \    比如  

#include<stdio.h>//密码,当输出特殊符号时,要在输出的符号前加上反斜杠 
int main()
{
	printf("\@");
	return 0;
}

会输出 @ 

动态数组的申请

动态数组的头文件是#include<stdlib.h>

分为两种  按需申请

1.申请内存的函数  :void *malloc (unsigned int size)    向系统申请 size 大小的内存空间

2.void *calloc (unsigned int num, unsigned int size )      向系统申请num 个size的内存空间

  比如你要申请 10 个int 型大小的内存空间,用malloc 前要去计算 10 *sizeof (int )  ,而如果用第二个函数 calloc 就可以直接让 num = 10  然后 size = sizeof( int ) 就可以了

它俩的区别就是 calloc 会把申请的内存值都置为 0 

这两个函数,在后面的运行中要返回一个自己设置的变量  比如说  int *p   之后                               p = (int *)malloc(10*sizeof(int ))    10个 int 型大小的空间 10个 p[0] 到p[9] 的元素  *(p + 2) = p[ 2 ]   p = (int *)calloc (10,sizeof(int ))     10个 int 型大小的空间 10个 p[0] 到p[9] 的元素   但不一样的是 p[0]到p[9] 的元素全部都等于0;

题目:

题目 1162: 

密码

时间限制: 1s 内存限制: 128MB 提交: 5097 解决: 1855

题目描述

网上流传一句话:"常在网上飘啊,哪能不挨刀啊~"。其实要想能安安心心地上网其实也不难,学点安全知识就可以。
首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:
(1).密码长度大于等于8,且不要超过16。
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。
这四个字符类别分别为:
1.大写字母:A,B,C...Z;
2.小写字母:a,b,c...z;
3.数字:0,1,2...9;
4.特殊符号:~,!,@,#,$,%,^;
给你一个密码,你的任务就是判断它是不是一个安全的密码。

输入格式

输入数据第一行包含一个数M,接下有M行,每行一个密码(长度最大可能为50),密码仅包括上面的四类字符。

输出格式

对于每个测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。

样例输入

复制

3
a1b2c3d4
Linle@ACM
^~^@^@!%

样例输出

复制

NO
YES
NO
#include<stdio.h>
#include<stdilb.h>//定义动态数组
int main()
{
	char*ch;
	int dx,xx,sz,zf;//大写 小写 数字 字符
	int n,i;
	scanf("%d\n",&n);
	for(i = 0;i < n;i++)
	{
		int flag = 1;//这是字符串在确定的范围内
		ch = (char*)malloc(60*sizeof(char));
		dx = xx = sz = zf = 0;//用来后面判断一串字符的长度 
		scanf("%s\n",ch);
		int str = strlen(ch);
		if(str<8||str>=16) 
		{
			flag = 0;
		}
		if(flag==1)
		{
			int j;
			for(j=0;j<str;j++)
			{
				if(dx==0&&ch[j]>='A'&&ch[j]<='Z');
				   dx = 1;
				if(xx==0&&ch[j]>='a'&&ch[j]<='z');
				   xx = 1;
				if(sz==0&&ch[j]>='0'&&ch[j]<='1');
				   sz = 1;
				if(zf==0&&ch[j]=='~'||ch[j]=='!'||ch[j]=='@'||ch[j]=='#'||ch[j]=='$'||ch[j]=='%'||ch[j]=='^'||ch[j]=='&')
				   zf = 1;
			}
		}
		if(flag==1&&dx+xx+sz+zf>=3)
		{
			printf("YES\n");
		}
		else
		{
			printf("NO\n");
		}
		free(ch)
	}
	return 0;
 } 

可能会有点小瑕疵,我用的DEV C++ 算算出的结果不太对,但是C语言网上的交上就对了,这很奇怪

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值