题解 | #密码验证合格程序#
密码验证合格程序
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
#include <math.h> #include <stdio.h> #include <string.h> int main() { /*变量定义开始*/ char password[100] = {"/0"}; char* pp = password; while (scanf("%s", password)!=EOF) { int len = strlen(password); int i = 0; /*小写字母,大写字母,数字,其他符号*/ int vtype[4] = {0, 0, 0, 0}; /*变量定义结束*/ /*密码长度判断开始*/ if (len < 8) { printf("长度NG\n"); continue; } /*密码长度判断结束*/ /*密码字符类型数判断开始*/ for (i = 0; i < len; i++) { if ('a'<=password[i] && password[i]<='z') { vtype[0]=1; } else if ('A'<=password[i] && password[i]<='Z') { vtype[1]=1; } else if ('0'<=password[i] && password[i]<='9') { vtype[2]=1; } else { vtype[3]=1; } } int sum_vtype=vtype[0]+vtype[1]+vtype[2]+vtype[3]; if (sum_vtype<3) { printf("类型NG\n"); continue; } /*密码字符类型数判断结束*/ /*字串重复判断开始*/ /*长度等于三的字串重复即判断NG*/ /*依次记录所有长度3的子串对比*//*或者判断有相等的字符就继续判断下一位直到三为相等*/ char str_1[3]={"/0"}; char str_2[3]={"/0"}; int j=0,k=0; int mark3=0; for (i=0; i<len-4; i++) { /*str_1字串读入*/ for (j=0; j<3; j++) { str_1[j]=password[i+j]; } /*依次前进进行字符串对比*/ for (j=i+1; j<=len-3; j++) { for(k=0;k<=2;k++){ str_2[k]=password[j+k]; } /*判断是否一致*/ if (str_1[0]==str_2[0]&&str_1[1]==str_2[1]&&str_1[2]==str_2[2]) { mark3=1; continue; } } } if (mark3==1) { printf("重复NG\n"); } else { printf("全部OK\n"); } /*字串重复判断结束*/ } return 0; }
依次判断条件1,2,3。感觉先用标记记下来每一步的结果,最后集中输出好一点,我直接在每次判断完就输出了。