写了个命令行版本的, 使用的时候, 直接把密码当成命令行参数使用吧,
如果不合心意, 可以自己改改(对于第4类字符, 没有考虑符号表)
/*
@20140129
for
by '热心网友'
*/
#include
#include
#include
#define PASS_SAFE_NONE 0
#define PASS_SAFE_LOW 1
#define PASS_SAFE_MED 2
#define PASS_SAFE_HIG 3
int chkpasswd(char *pass);
int output(int safecode);
int main(int argc, char **argv) {
if(argc != 2) {
printf("Usage Error\n");
exit(1);
}
int ret = chkpasswd(argv[1]);
output(ret);
}
int output(int code) {
printf("code=%d\n", code);
switch(code) {
case PASS_SAFE_NONE:
case PASS_SAFE_LOW:
printf("Not Safe\n");
break;
case PASS_SAFE_MED:
printf("Medium Safe\n");
break;
case PASS_SAFE_HIG:
printf("Safe\n");
break;
}
return code;
}
int chkpasswd(char *pass) {
int len = strlen(pass);
if(len < 6) return PASS_SAFE_NONE;
int b_class1 = 0;
int b_class2 = 0;
int b_class3 = 0;
int b_class4 = 0;
int ret = 0;
char *p = pass;
for(p = pass; p < (pass + len); p++) {
if(ret >= PASS_SAFE_HIG) return PASS_SAFE_HIG;
if(*p >= '0' && *p <= '9') { //0-9
if(b_class1) {
continue;
} else {
b_class1 = 1;
ret++;
}
} else if(*p >= 'A' && *p <= 'Z') { //Upper
if(b_class2) {
continue;
} else {
b_class2 = 1;
ret++;
}
} else if(*p >= 'a' && *p <= 'z') { //Lower
if(b_class3) {
continue;
} else {
b_class3 = 1;
ret++;
}
} else { //Symb
if(b_class4) {
continue;
} else {
b_class4 = 1;
ret++;
}
}
}
return ret;
}
#include
#include
#include "ctype.h"
void main()
{
unsigned i,n,j=0;
char str[20];
int alpha=0,digit=0,other=0,s;
printf("input how many array: ");
scanf("%d",&n);
while(j<=n)
{
j++;
printf("input:\n");
scanf("%s",str);
if(strlen(str)<6)printf("Not Safe\n");
else
{
for(i=0;i{
if(isalpha(str[i])!=0) alpha=1;//字母
else if(isdigit(str[i])!=0)digit=1;//数字
else other=1;
}
s=alpha+digit+other;
switch(s)
{
case 1:printf("Not Safe\n");break;
case 2:printf("Medium Safe\n");break;
case 3:printf("Safe\n");
}
}
}
}
你好!
这个问题可以理解为,输入字符类型的统计