求解
任务林晓炜正在设计一个网络交易系统,为了保证用户的密码安全,他需要一个程序,判断用户自己设置的密码是否安全,如果不安全,则给出提示。现在他向你求助,请你帮忙设计一个程序来解决这个问题。
应当按照以下的规则来判断密码是否安全:
如果密码长度小于 6 位,则不安全
如果组成密码的字符只有一类,则不安全
如果组成密码的字符有两类,则为中度安全
如果组成密码的字符有三类或以上,则为安全
通常,可以认为数字、大写字母、小写字母和其它符号为四类不同的字符。
输入
输入的第一行是一个整数 N,表明后面有多少组密码。随后的 N 行输入包括 N 个密码,每个密码的长度均小于 20 个字符。
输出
针对每一个密码判断并输出它是否安全。对于不安全的密码输出 "Not Safe",对于中度安全的密码输出 "Medium Safe",对于安全的密码输出 "Safe"
输入样例
4
1234
abcdef
ABC123
1#c3Gh
输出样例
Not Safe
Not Safe
Medium
Safe
Safe 本帖最后由 jhq999 于 2021-12-11 19:33 编辑
char pw={0},flag={0};
int num=0,i=0,j=0;
scanf("%d",&num);
for(i=0;i<num;i++)
{
j=0;
while(pw)pw='\0';
scanf("%s",pw);
for(j=0;pw;j++)
{
if(pw>='a'&&pw<='z')flag|=1;
else if(pw>='A'&&pw<='Z')flag|=1;
else if(pw>='0'&&pw<='9')flag|=1;
else flag|=1;
}
if(j<6)printf("Not Safe");
else if((flag+flag+flag+flag)==1)printf("Not Safe");
else if((flag+flag+flag+flag)==2)printf("Medium");
else if((flag+flag+flag+flag)>=3)printf("Safe");
}
#include <stdio.h>
int check(char s[])
{
int a , c , d , e, n , r ;
for(a = c = d = e = n = r = 0 ; s ; n ++) {
if(s >= '0' && s <= '9') d = 1 ;
else if(s >= 'A' && s <= 'Z') c = 1 ;
else if(s >= 'a' && s <= 'z') a = 1 ;
else e = 1 ;
}
if(n > 5) {
if((a + c + d + e) == 1) r = 1 ;
else r = 2 ;
}
return r ;
}
int main(void)
{
char s ;
int e , i , j , n ;
scanf("%d" , & n) ;
fflush(stdin) ;
for(i = 0 ; i < n ; i ++) {
for(j = 0 ; j < 20 && (s = getchar()) != '\n' ; j ++) ;
s = '\0' ;
}
for(i = 0 ; i < n ; i ++) {
e = check(s) ;
if(! e) printf("Not Safe\n") ;
else if(e == 1) printf("Medium Safe\n") ;
else printf("Safe\n") ;
}
}
编译、运行实况:
D:\00.Excise\C>g++ -o x x.c
D:\00.Excise\C>x
4
1234
abcdef
ABC123
1#c3Gh
Not Safe
Medium Safe
Safe
Safe
D:\00.Excise\C> 本帖最后由 傻眼貓咪 于 2021-12-11 20:01 编辑
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char* levels(char* p){
if(strlen(p) < 6) return "Not Safe";
int digit = 0, upper = 0, lower = 0, other = 0;
for(int i = 0; p; i++){
if(isdigit(p)) digit = 1;
else if(isupper(p)) upper = 1;
else if(islower(p)) lower = 1;
else other++;
}
if(digit + upper + lower + other == 1) return "Not Safe";
else if(digit + upper + lower + other < 3) return "Medium Safe";
else return "Safe";
}
int main()
{
char p;
int n;
scanf("%d", &n);
char* res;
for(int i = 0; i < n; i++){
scanf("%s", p);
res = levels(p);
}
for(int i = 0; i < n; i++) printf("%s\n", res);
return 0;
}
页:
[1]