输入数据
输入数据有若干行,每行为一个字符串,表示密码。
输出数据
对每行输入,请在单独的行中输出密码强度的判定结果。
若密码无效(即密码含空格),请输出invalid。
若密码有效且是强密码,则输出true,否则输出false。
一般认为有效的密码中不应该包含空格,且应该具备一定的强度。一个强密码长度应不少于8位字符,且满足以下4种条件中至少3种:
密码含有至少一个小写字母
密码含有至少一个大写字母
密码含有至少一个数字
密码含有至少一个特殊符号,特殊符号包括 ()`!@#$%^&*_-+=|{}[]:;'<>,.?
自己写的代码不知道为什么输入aws会输出两个false(这个是我上个问题的完整版)
#include <stdio.h>
int main() {
char c;char c_tmp;
int a, b, e, d,f=0;
while ((c = getchar()) != EOF) {
a = b = e = d = 0;
while (c != '\n') {if(c==' '){printf("invalid\n");while ((c_tmp = getchar() != '\n') && c_tmp != EOF);continue;}
f++;
if(f<8){printf("false\n");f=0;
while ((c_tmp = getchar() != '\n') && c_tmp != EOF);
continue;
}
if (c >= 'a' && c <= 'z') {
a = 1;
} else if (c >= 'A' && c <= 'Z') {
e = 1;
} else if (c >= '0' && c <= '9') {
b = 1;
} else if (c == '(' || c == ')' || c == '`' || c == '!' ||
(c >= '@' && c <= '[') ||
(c >= ']' && c <= '_') || c == '-' || c == '+' ||
c == '=' || c == '|' || (c >= '{' && c <= '}') ||
c == ';' || c == ':' || c == '<' || c == '>' ||
c == ',' || c == '.') {
d = 1;
}
c = getchar();
}
if (a + b + e + d >= 3) {
printf("true\n");
} else {
printf("false\n");
}
}
return 0;
}