密码问题(函数、字符串、指针)(航电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++);
}
原文地址:https://www.cnblogs.com/yuzilan/p/10626179.html