诗人-with-BYD 2022-10-16 09:36 采纳率: 37.5%
浏览 11
已结题

关于牛牛的密码,如何解决?(语言-c++)

题目

题目描述
牛牛在注册不同的网站时,总是会使用不同的密码来保证他的账号安全。 为了保证他的密码强度,牛牛使用他的“字符串筛选器”来测试密码的强度。 具体来说,他先将输入的字符串筛选分成四部分。

第一部分仅由小写英文字母组成

第二部分仅由大写英文字母组成

第三部分仅由0到9的数字组成

第四部分由其余特殊字符组成

这四部分要保留它们在原字符串中的相对顺序。

比如将"1q2w3E4R5{6}"这个字符串进行筛选后

四部分分别为:"qw"、"ER"、"123456"、"{}"。

然后只要某一部分不为空,牛牛就认为他的密码等级高1级。 密码等级最低为1级,最高4级。 例如"asdA@123"的密码等级为4,"20020101"的密码等级为1。

请帮助牛牛判断他注册账号时的密码等级,以及该密码做字符串筛选后的结果。

输入格式
仅一行一个字符串s,表示牛牛的密码。

输出格式
首先输出一行"password level:X",X表示牛牛的密码等级,最低为1级,最高4级。

接下来输出4行,表示四部分的筛选结果,输出时要注意保留它们在原字符串中的相对顺序,如果某一部分为空串,则改为在该行输出"(Null)"。

样例
样例输入1
123456
样例输出1
password level:1
(Null)
(Null)
123456
(Null)
样例输入2
Pass_Word
样例输出2
password level:3
assord
PW
(Null)
_
数据范围与提示
对于20%的测试数据,保证仅有小写英文字母组成,且1≤∣s∣≤100

对于40%的测试数据,保证仅有大小写英文字母组成,且1≤∣s∣≤100

对于100%的测试数据,保证字符串是不含空格、回车、或者其他不可见字符的非空字符串,且保证字符串长度1≤∣s∣≤10^4。

代码又臭又长
#include <bits/stdc++.h>
using namespace std;
class Password{
    public:
        short Level = 0;
        string Password;
        string Member[4] = {"(Null)", "(Null)", "(Null)", "(Null)"};
};
Password GetLevel(string PasWor){
    bool Level[4] = {0, 0, 0, 0};
    Password PaWo1;
    PaWo1.Password = PasWor;
    string Tmp;
    for(int i = 0; i < PaWo1.Password.length(); i++){
        Tmp = PaWo1.Password[i];
        if(int(PaWo1.Password[i]) > 47 and int(PaWo1.Password[i]) < 58){
            if(Level[2] == false)
                PaWo1.Member[2] = ""; 
            Level[2] = true;
            PaWo1.Member[2] = PaWo1.Member[2] + Tmp;
        }
        else if(int(PaWo1.Password[i]) > 64 and int(PaWo1.Password[i]) < 91){
            if(Level[1] == false)
                PaWo1.Member[1] = ""; 
            Level[1] = true;
            PaWo1.Member[1] = PaWo1.Member[1] + Tmp;
        }
        else if(int(PaWo1.Password[i]) > 96 and int(PaWo1.Password[i]) < 123){
            if(Level[0] == false)
                PaWo1.Member[0] = ""; 
            Level[0] = true;
            PaWo1.Member[0] = PaWo1.Member[0] + Tmp;
        }
        else{
            if(int(PaWo1.Password[i]) != 0){
                if(Level[3] == false)
                    PaWo1.Member[3] = ""; 
                Level[3] = true;
                PaWo1.Member[3] = PaWo1.Member[3] + Tmp;
            } 
        }
    }
    for(int i = 0; i < 4; i++){
        if(PaWo1.Member[i] != "(Null)")
            PaWo1.Level++;
    }
    return PaWo1;
}
int main(){
    std::ios::sync_with_stdio(false);
    string PaswoR;
    cin >> PaswoR;
    Password PaWo1 = GetLevel(PaswoR);
    cout << "password level:" << PaWo1.Level << "\n";
    for(int i = 0; i < 4; i++){
        cout << PaWo1.Member[i] << "\n";
    }
    return 0;
}
Accept,但太长
  • 写回答

1条回答 默认 最新

  • honestman_ 2022-10-16 10:05
    关注

    代码如下,如果解决问题,请点击一下采纳谢谢:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    string s,a[10];
    int l;
    int main()
    {
        getline(cin,s);
        for (int i=0;i<s.size();i++)
        {
            if (s[i]>='a'&&s[i]<='z')
            {
               a[1]+=s[i];
               continue;
            }
            if (s[i]>='A'&&s[i]<='Z')
            {
               a[2]+=s[i];
               continue;
            }
            if (s[i]>='0'&&s[i]<='9')
            {
               a[3]+=s[i];
               continue;
            }
            a[4]+=s[i];
        }
        for (int i=1;i<=4;i++)
            if (a[i]!="")
               l++;
        printf("password level:%d\n",l);
        for (int i=1;i<=4;i++)
            if (a[i]!="")
               cout<<a[i]<<endl;
               else printf("(Null)\n");
        return 0;
    } 
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月5日
  • 已采纳回答 11月27日
  • 创建了问题 10月16日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效