更安全的密码

更安全的密码

题目描述

小T学院最近经常出现学生账号被盗的情况,主要原因是大量学生设置的密码过于简单。

身为学院内最具智慧的小T,想出了一个解决方案:制定一套密码规则,提升密码的安全性,同时将现有不符合这套规则的学生密码进行批量更新

目前新的密码规则如下:

  • 必须至少由 7 个字符组成
  • 必须至少含有 1 个大写英文字母
  • 必须至少含有 1 个小写英文字母
  • 必须至少含有 1 个数字
  • 必须至少含有 1 个特殊字符。特殊字符只允许使用 #@*& 这几种。

接下来就是批量修改不符合规则的密码了,小T打算让你帮忙设计一个程序,检测学生密码的规范性。假如学生密码符合上述规则,则不做处理;否则对密码进行修改。

为了学生便于记忆,小T希望在保留旧密码字符串的前提下,尽可能少的在末尾添加新字符来适配新的密码规则。

输入格式

第一行一个整数 TT,表示共有 TT 组数据,每组数据格式如下:

第一行一个整数 LL,表示旧密码的长度

第二行一个长度为 LL 的字符串(不含空格),表示旧密码。

输出格式

共 TT 行,每行对应一组数据的答案。

对于每一组数据,答案并不唯一,只需要输出任意一种符合题目要求的答案即可。

测试样例

输入样例 #1

2
4
2258
8
11112567

输出样例 #1

2258zA&
11112567c@K

输入样例 #2

3
1
B
2
3*
7
1234aB&

输出样例 #2

Ba1*439
3*zxCD*
1234aB&

数据范围

对于 50%50% 的数据,旧密码仅由数字组成,且 7≤L≤1047≤L≤104。

对于 100%100% 的数据,1≤T≤100,1≤L≤1041≤T≤100,1≤L≤104,旧密码仅可能由大小写字母、数字、规定范围内的特殊字符组成。

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int N;
string password;

int main(){
    int t;
    cin >> t;
    while(t--){
        int l;
        cin >> l;
        cin >> password;

        bool condition2 = false;
        bool condition3 = false;
        bool condition4 = false;
        bool condition5 = false;
        for (int i = 0; i < password.size(); i++) {
            if (password[i] >= 'A' && password[i] <= 'Z')
            condition2 = true;
            else if (password[i] >= 'a' && password[i] <= 'z')
            condition3 = true;
            else if (password[i] >= '0' && password[i] <= '9')
            condition4 = true;
            else if (password[i] == '@' || password[i] == '#' || password[i] == '&' || password[i] == '*')
            condition5 = true;
        }

        if (!condition2) password.append("A"); // Append any uppercase English alphabet letter.
        if (!condition3) password.append("a"); // Append any lowercase English alphabet letter.
        if (!condition4) password.append("1"); // Append any digit.
        if (!condition5) password.append("#"); // Append any special character.

        // Append any digit, letter, or a special character.
        while (password.size() < 7) password.append("1");
        cout << password << endl;
    }

    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值