2009-01-15 16:23:47來源不明

2005 NPSC F. 密碼安全設定

此提學習重點:strcmp的用法,如果符合就回傳0。z[4]="END";宣告方式

/************************************************************/

  1. #include<stdio.h>      
  2. #include<stdlib.h>   
  3. #include<string.h>   
  4. main()   
  5. {    
  6.  int a,b,c,flag=0,flag1=0,flag2=0,flag3=0,flag4,flag5,temp=0;   
  7.  char x[100],y[100],z[4]="END";   
  8.  while(gets(x)!=0&&gets(y)!=0&&(strcmp(x,z)!=0||strcmp(y,z)!=0))   
  9.   {        
  10.    flag=0;flag1=0;flag2=0;flag3=0;flag5=0;temp=0;   
  11.    if(strcmp(x,y)==0)   
  12.     {   
  13.      if(strlen(x)<=12&&strlen(x)>=8)   
  14.       {   
  15.        for(a=0;a<strlen(x);a++)   
  16.         {   
  17.           if(x[a]<=90&&x[a]>=65)       /*包含至少1個大寫英文字*/  
  18.            {flag=1;break;}   
  19.         }   
  20.         if(flag==1)   
  21.          {   
  22.            for(a=0;a<strlen(x);a++)   
  23.             {   
  24.              if(x[a]<=122&&x[a]>=97) /*包含至少1個小寫英文字*/  
  25.               {flag1=1;break;}   
  26.             }   
  27.            if(flag1==1)   
  28.             {   
  29.               for(a=0;a<strlen(x);a++)   
  30.               {   
  31.                if(x[a]>=48&&x[a]<=57) /*包含至少1個數字*/  
  32.                 {flag3=1;break;}   
  33.               }    
  34.               if(flag3==1)   
  35.                {    
  36.                  for(a=0;a<strlen(x);a++)   
  37.                   {   
  38.                   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]==' '))   
  39.                    {flag2=1;break;}            /*包含至少1個特殊符號*/  
  40.                   }           
  41.                  if(flag2==1)   
  42.                    {   
  43.                    for(a=0;a<strlen(x);a++)   
  44.                     {   
  45.                     if(x[a]==x[strlen(x)-1-a])   
  46.                     temp++;   
  47.                     }   
  48.                    if(temp!=strlen(x))   
  49.                     {   
  50.                      for(a=strlen(x)-1;a>0;a--)   
  51.                       {                
  52.                        if(x[0]==x[a]&&x[1]==x[a+1]) /*取兩組連續的頭值例如 abxxxxabxxxx*/  
  53.                          {flag4=a;break;}               
  54.                       }      
  55.                      for(b=0;b<flag4;b++)   
  56.                       {   
  57.                        for(a=b;a<strlen(x);a=a+flag4)   
  58.                         {   
  59.                          if(x[b]!=x[a])   
  60.                           {flag5=1;break;}   
  61.                         }   
  62.                       }           
  63.                      if(flag5==1)   
  64.                       printf("Password is valid.\n");   
  65.                      else  
  66.                       printf("Circular password is not allowed.\n");    
  67.                     }   
  68.                    else  
  69.                     printf("Symmetric password is not allowed.\n");    
  70.                  }   
  71.                 else  
  72.                  printf("Password should contain at least one special character.\n");   
  73.                }   
  74.               else  
  75.                printf("Password should contain at least one number.\n");   
  76.             }   
  77.            else  
  78.             printf("Password should contain at least one lower-case alphabetical character.\n");   
  79.          }   
  80.         else  
  81.          printf("Password should contain at least one upper-case alphabetical character.\n");   
  82.       }   
  83.      else  
  84.       printf("Password should contain 8 to 12 characters.\n");   
  85.     }     
  86.    else  
  87.     printf("Password settings are not consistent.\n");     
  88.   }      
  89.  return 0 ;        
  90. }