2009-01-15 16:23:47來源不明
2005 NPSC F. 密碼安全設定
此提學習重點:strcmp的用法,如果符合就回傳0。z[4]="END";宣告方式
/************************************************************/
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- main()
- {
- int a,b,c,flag=0,flag1=0,flag2=0,flag3=0,flag4,flag5,temp=0;
- char x[100],y[100],z[4]="END";
- while(gets(x)!=0&&gets(y)!=0&&(strcmp(x,z)!=0||strcmp(y,z)!=0))
- {
- flag=0;flag1=0;flag2=0;flag3=0;flag5=0;temp=0;
- if(strcmp(x,y)==0)
- {
- if(strlen(x)<=12&&strlen(x)>=8)
- {
- for(a=0;a<strlen(x);a++)
- {
- if(x[a]<=90&&x[a]>=65) /*包含至少1個大寫英文字*/
- {flag=1;break;}
- }
- if(flag==1)
- {
- for(a=0;a<strlen(x);a++)
- {
- if(x[a]<=122&&x[a]>=97) /*包含至少1個小寫英文字*/
- {flag1=1;break;}
- }
- if(flag1==1)
- {
- for(a=0;a<strlen(x);a++)
- {
- if(x[a]>=48&&x[a]<=57) /*包含至少1個數字*/
- {flag3=1;break;}
- }
- if(flag3==1)
- {
- for(a=0;a<strlen(x);a++)
- {
- if((x[a]>=33&&x[a]<=47)||(x[a]>=58&&x[a]<=64)||(x[a]>=91&&x[a]<=96)||(x[a]>=123&&x[a]<=126||x[a]==' '))
- {flag2=1;break;} /*包含至少1個特殊符號*/
- }
- if(flag2==1)
- {
- for(a=0;a<strlen(x);a++)
- {
- if(x[a]==x[strlen(x)-1-a])
- temp++;
- }
- if(temp!=strlen(x))
- {
- for(a=strlen(x)-1;a>0;a--)
- {
- if(x[0]==x[a]&&x[1]==x[a+1]) /*取兩組連續的頭值例如 abxxxxabxxxx*/
- {flag4=a;break;}
- }
- for(b=0;b<flag4;b++)
- {
- for(a=b;a<strlen(x);a=a+flag4)
- {
- if(x[b]!=x[a])
- {flag5=1;break;}
- }
- }
- if(flag5==1)
- printf("Password is valid.\n");
- else
- printf("Circular password is not allowed.\n");
- }
- else
- printf("Symmetric password is not allowed.\n");
- }
- else
- printf("Password should contain at least one special character.\n");
- }
- else
- printf("Password should contain at least one number.\n");
- }
- else
- printf("Password should contain at least one lower-case alphabetical character.\n");
- }
- else
- printf("Password should contain at least one upper-case alphabetical character.\n");
- }
- else
- printf("Password should contain 8 to 12 characters.\n");
- }
- else
- printf("Password settings are not consistent.\n");
- }
- return 0 ;
- }