题目描述

网站注册需要有用户名和密码,编写程序以检查用户输入密码的有效性。合规的密码应满足以下要求 :

  1. 只能由 a∼z 之间 26 个小写字母、A∼Z 之间 26 个大写字母、0∼9 之间 10 个数字以及 !@#$ 四个特殊字符构成。

  2. 密码最短长度 :6 个字符,密码最大长度 :12 个字符。

  3. 大写字母,小写字母和数字必须至少有其中两种,以及至少有四个特殊字符中的一个。

输入格式

输入一行不含空格的字符串。约定长度不超过 100。该字符串被英文逗号分隔为多段,作为多组被检测密码。

输出格式

输出若干行,每行输出一组合规的密码。输出顺序以输入先后为序,即先输入则先输出。

输入输出样例

输入 #1复制

seHJ12!@,sjdkffH$123,sdf!@&12HDHa!,123&^YUhg@!

输出 #1复制

seHJ12!@
sjdkffH$123

说明/提示

【样例 1 解释】

输入被英文逗号分为了四组被检测密码:seHJ12!@sjdkffH$123sdf!@&12HDHa!123&^YUhg@!。其中 sdf!@&12HDHa! 长度超过 12 个字符,不合规;123&^YUhg@! 包含四个特殊字符之外的字符不合规。

思路:

可以写一个函数判断:

1. 先判断长度

int len = s.size();
if(len < 6 || len > 12){
    return false;
}

​

2.再根据条件判断

bool upp = false, low = false, num = false, spc = false;
    for(int i = 0;i < len;i++){
        if(s[i] >= 'a' && s[i] <= 'z') low = true;
        else if(s[i] >= 'A' && s[i] <= 'Z') upp = true;
        else if(s[i] >= '0' && s[i] <= '9') num = true;
        else if(s[i] == '!' || s[i] == '@' || s[i] == '#' || s[i] == '$') spc = true;
        else return false;
    }
    if((upp == true && low == true && spc == true) || (low == true && num == true && spc == true) || (upp == true && num == true && spc == true)){
        return true;
    }

上代码:

#include<bits/stdc++.h>
using namespace std;
bool check(string s){
    int len = s.size();
    if(len < 6 || len > 12){
        return false;
    }
    bool upp = false, low = false, num = false, spc = false;
    for(int i = 0;i < len;i++){
        if(s[i] >= 'a' && s[i] <= 'z') low = true;
        else if(s[i] >= 'A' && s[i] <= 'Z') upp = true;
        else if(s[i] >= '0' && s[i] <= '9') num = true;
        else if(s[i] == '!' || s[i] == '@' || s[i] == '#' || s[i] == '$') spc = true;
        else return false;
    }
    if((upp == true && low == true && spc == true) || (low == true && num == true && spc == true) || (upp == true && num == true && spc == true)){
        return true;
    }
    return false;
}
string s;
int main(){
    cin >> s;
    s += ',';
    string pwd = "";
    for(int i = 0;i < s.size();i++){
        if(s[i] != ','){
            pwd += s[i];
        }else{
            if(check(pwd)){
                cout << pwd << "\n";
            }
            pwd = "";
        }
    }
    return 0;
}

禁止复制刷AC!!!

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐