zoukankan      html  css  js  c++  java
  • 密码问题(函数、字符串、指针)(航电2043题改版)(c++)

    【问题描述】
    假设一个比较安全的密码至少应该满足下面两个条件:
    (1)密码长度大于等于8,且不要超过16。
    (2)密码中的字符应该来自下面“字符类别”中四组中的至少三组。
    这四个字符类别分别为:
    1.大写字母:A,B,C…Z;
    2.小写字母:a,b,c…z;
    3.数字:0,1,2…9;
    4.特殊符号:~,!,@,#,$,%,^;
    给你一个密码,你的任务就是判断它是不是一个安全的密码。
    请设计函数bool Password(char *str)实现之。

    【输入形式】
    测试实例包含一个密码(长度最大为50),密码仅包括上面的四类字符。

    【输出形式】
    对于测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。

    【样例输入】
    a1b2c3d4

    【样例输出】
    NO

    题目难点

    1. 密码长度要控制在8到16位,可是密码又是用户输入的。若想知道一个输入的字符串长度,我们可以使用一个新的函数strlen(),这个函数在头文件#include 中定义,当然你也可以自己编写实现这个函数的功能,见“补充”部分
    2. strlen()的功能:是一个计数器,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’’为止,然后返回计数器值(长度不包含’’)。 知道了其功能,所以我们初始给数组分栈的时候要把内存全部初始化为’’
    3. 用ASCII码来判断数组每个单元格内存储的字符符不符合标准

    代码1

    #include <iostream>
    #include <cstring>
    using namespace std;
    bool Password(char *str);//声明 bool型函数,其参数是字符型指针,
                             //其与bool Password(char str[]);在功能上是一致的
    int main()
    {
    	char s[50]="";//测试密码长度最大为 50,且这个空串初始化在“笔记”板块会详讲
        cin>>s;
        int len = strlen(s);//算长度
        if( len>=8 && len<=16 )//判断长度知否符合规定
        {
            if(Password(s))//符合题意
                cout<<"YES"<<endl;
            else//不符合题意
                cout<<"NO"<<endl;
        }
        else//字符数不在范围内的
            cout<<"NO"<<endl;
    	return 0;
    }
    
    bool Password(char *str)
    {
        int a=0,b=0,c=0,d=0;
        for(int j=0;str[j];j++)//也是用结束符号''来判断循环体
        {
            if( str[j]<='z' && str[j]>='a' ) a=1;//只要数组中有一个字符满足是小写字母的要求就把a赋值为1
            if( str[j]<='Z' && str[j]>='A') b=1;//大写字母同理
            if( str[j]<='9' && str[j]>='0') c=1;//数字同理
            if( str[j]=='~' || str[j]=='!' || str[j]=='@' || str[j]=='#' || str[j]=='$' || str[j]=='%' || str[j]=='^' ) d=1;
        }//特殊符号同理
    
        if( a+b+c+d >= 3 ) return 1;//即如果四者中满足三者就返回真值1
        return 0;
    }
    

    笔记

    1. 把字符型数组初始化为空串的三种方法:
      (1) char str[10] = “”;
      (2) char str[10] = { ‘’ };
      (3) char str[10]; str[0] = ‘’;
    2. 字符数组初始化:
      (1) char str[6] = { ‘C’, ‘h’, ‘i’, ‘n’, ‘a’, ‘’ };
      (2) char str[6] = {“China”};
      (3) char str[6] = “China”;

    补充拷贝代码:

    #include <iostream>
    using namespace std;
    void mystrcpy(char *dest, const char *source);//函数声明
    int main()
    {
        //......
    }
    
    void mystrcpy(char *dest, const char *source)//拷贝函数定义
    {
        while( *dest++ = *source++);
    }
    
  • 相关阅读:
    App的开发过程(转载)
    一款APP的完整开发流程 (转载)
    JS判断是否是数组的四种做法(转载)
    easyui datagrid Column Group 列组、 复杂表头 嵌套表头 组合表头 (转载)
    php bootstrap-datetimepicker
    Echarts实现Excel趋势线和R平方计算思路
    前端项目开发流程(转载)
    对有序特征进行离散化(继承Spark的机器学习Estimator类)
    Spark ML 中 VectorIndexer, StringIndexer等用法(转载)
    Z-Score数据标准化(转载)
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626179.html
Copyright © 2011-2022 走看看