特殊字符包括:~ ` ! @ # $ % ^ & * ( ) _ - + = | \ { } [ ] : ; “ ‘ < > , . ? /
特殊符号的输出,要在要输出的特殊符号前加上反斜杠 \ 比如
#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语言网上的交上就对了,这很奇怪