Chinaunix首页 | 论坛 | 博客
  • 博客访问: 294110
  • 博文数量: 30
  • 博客积分: 732
  • 博客等级: 军士长
  • 技术积分: 439
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-10 00:13
文章分类

全部博文(30)

文章存档

2015年(1)

2013年(5)

2012年(24)

我的朋友

分类: C/C++

2013-04-04 16:54:48

 密码是否符合要求

时间限制: 20 Sec  内存限制: 128 MB

题目描述

    
    随着网络信息化应用的不断推进,信息系统网络安全问题越来越被重视。在网络和系统安全领域中,密码这种方式是其中最普遍的认证方式。对于系统安全来说,使用复杂的密码是网络密码安全措施最简单有效的手段。某系统规定用户的密码长度和复杂度必须满足下条件。
1、 密码由英文大小写字母、数字及特殊符号组成。其中特殊符号只能是:
@ # $ % ^ & * + / = ! ? - _ ( )
2、至少8个字符,最长20个字符。
3、密码必须包含下列类型中的任意3类:1)大写字母; 2)小写字母; 3)数字; 4)特殊字符。
请编写一段程序,用于验证密码是否符合要求。

输入

    字符串一行或多行,每行一个密码,如My#Password

输出

    字符串一行或多行,对应密码是否符合要求,true或false

样例输入

This8Password
Pass123

样例输出

true
false

提示

ok

地区

公共

难度

1级


点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<ctype.h>

  4. char str[20][21]={0};
  5. int i=0,n;

  6. //检查是否是特殊字符
  7. int vaSpeStr(char ch){
  8.     if(ch=='@'||ch=='#'||ch=='$'||ch=='%'||ch=='^'||ch=='&'||ch=='*'||ch=='+'||ch=='/'||ch=='='||ch=='!'||ch=='?'||ch=='-'||ch=='_'||ch=='('||ch==')')
  9.         return 1;
  10.     else return 0;
  11. }

  12. //检查长度是否满足要求

  13. int valen(char *str){    
  14.     size_t len = strlen(str);
  15.     if(len>=8&&len<=20)
  16.         return 1;
  17.     else
  18.         return 0;
  19. }

  20. int vaLegal(char *str){            //字符是否合法
  21.     for(int i=0;i<=21;i++){
  22.         int n1=isalnum(str[i]);
  23.         int n2=vaSpeStr(str[i]);
  24.         if(n1!=0||n2!=0)
  25.             return 1;
  26.         else return 0;
  27.     }
  28. }


  29. //判断是否包括下列类型中的任意3类:1)大写字母isupper; 2)小写字母islower; 3)数字; 4)特殊字符。
  30. int vaType(char str[]){
  31.     int upperNum=0;            //计数器要放到方法里面来,不能做全局变量,否则在输入第二行数据后计数器未清零,会导致字符串不在判断 任意3类
  32.     int lowerNum=0;
  33.     int digitNum=0;    
  34.     int SpestrNum=0;
  35.     for(int i=0;i<20;i++){
  36.         int n1= isupper(str[i]);
  37.         int n2= islower(str[i]);
  38.         int n3= isdigit(str[i]);
  39.         int n4= vaSpeStr(str[i]);
  40.     
  41.     if(n1!=0)
  42.             upperNum++;
  43.     else if(n2!=0)
  44.             lowerNum++;
  45.     else if(n3!=0)
  46.             digitNum++;
  47.     else if(n4!=0)
  48.             SpestrNum++;
  49.     }
  50.                 
  51.     if(upperNum!=0&&lowerNum!=0&&digitNum!=0)
  52.         return 1;
  53.     else if(upperNum!=0&&lowerNum!=0&&SpestrNum!=0)
  54.         return 1;
  55.     else if(upperNum!=0&&digitNum!=0&&SpestrNum!=0)
  56.         return 1;
  57.     else if(lowerNum!=0&&digitNum!=0&&SpestrNum!=0)
  58.         return 1;
  59.     else return 0;                
  60. }

  61. int main(){
  62.     char judge;
  63.     gets(str[i]);
  64.     
  65.     while((judge = *str[i]) != '0') {
  66.      gets(str[++i]);                
  67.           n = i;
  68.     }
  69.     for(i=0;i<n;i++) {                
  70.         int n1= valen(str[i]);
  71.         int n2= vaType(str[i]);
  72.         int n3= vaLegal(str[i]);
  73.         if(n1==0||n2==0||n3==0)
  74.             puts("false");
  75.         else
  76.             puts("ture");
  77.     }
  78.     return 0;
  79. }





阅读(2033) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~