0分求助!!!

B3843 [GESP202306 三级] 密码合规

JmBecca @ 2024-12-07 11:30:39

#include <bits/stdc++.h>
#include <vector>
using namespace std;
string t,m;
int b=0;
bool check(string s){
    bool n1,n2,n3,n4=false;
    int cnt;
    if(s.length()<6 or s.length()>12)return false;
    else{
        for(int j=0;j<m.length();j++){
            if (m[j]>='0' and m[j]<='9')n1=true;
            else if(m[j]>='A' and m[j]<='Z')n2=true;
            else if(m[j]>='a' and m[j]<='z')n3=true;
            else if(m[j]=='!' or m[j]=='@' or m[j]=='#' or m[j]=='$')n4=true;
            else return false;
        }
    }
    if(n1)cnt++;
    if(n2)cnt++;
    if(n3)cnt++;
    if(cnt>=2 and n4)return true;
}
int main(){
    cin>>t;
    vector<string> a;
    for(int i=0;i<t.length();i++){
        if(t[i]==','){
            a.push_back(t.substr(b,i-b));
            b=i+1;
        }
    }
    a.push_back(t.substr(b,t.length()-b));
    for(int i=0;i<a.size();i++){
        m=a[i];
        if(check(m))cout<<m<<endl;
    }
    return 0;
}

by PrismOS @ 2024-12-07 21:37:03

老师发的,你的我在看。

#include<iostream> // 包含输入输出流库,用于输入输出操作
using namespace std; // 使用std命名空间,避免每次调用标准库时都需要加std::前缀

int n; // 定义一个全局变量n,用于记录分割后的子字符串数量
string t[100]; // 定义一个字符串数组t,用于存储分割后的子字符串,数组大小为100

int main () // 主函数入口
{
    string s; // 定义一个字符串s,用于接收用户输入
    cin>>s; // 从标准输入读取一行字符串到s

    for(int i=0;i<s.size();i++) // 遍历字符串s的每个字符
    {
        if(s[i]!=',') // 如果当前字符不是逗号
        {
            t[n]+=s[i]; // 将当前字符追加到数组t的第n个元素中
        }
        else // 如果当前字符是逗号
        {
            n++; // 将n加1,准备存储下一个子字符串
        }
    }
    // 此时,数组t中存储了按逗号分隔的子字符串,n是子字符串的数量(注意:最后一个子字符串后可能没有逗号,所以n可能多加了1)

    for(int i=0;i<=n;i++) // 遍历数组t中的每个子字符串(注意:这里应该是i<n,因为n可能多加了1)
    {
        string m=t[i]; // 将当前子字符串赋值给m
        int l=m.size(); // 获取子字符串m的长度
        int a=0,b=0,c=0,d=0,e=0; // 初始化计数器,分别用于统计小写字母、大写字母、数字、指定特殊字符和其他字符的数量

        if(l<6 || l>12) // 如果子字符串长度不在6到12之间(包含6和12),则跳过当前循环迭代
        {
            continue;
        }

        for(int j=0;j<l;j++) // 遍历子字符串m的每个字符
        {
            if(islower(m[j])) // 如果当前字符是小写字母
            {
                a++; // 小写字母计数器加1
            }
            else if(isupper(m[j])) // 如果当前字符是大写字母
            {
                b++; // 大写字母计数器加1
            }
            else if(isdigit(m[j])) // 如果当前字符是数字
            {
                c++; // 数字计数器加1
            }
            else if(m[j]=='!' || m[j]=='@' || m[j]=='$'||  m[j]=='#') // 如果当前字符是指定的特殊字符之一
            {
                d++; // 特殊字符计数器加1
            }
            else // 如果当前字符不是上述任何一类
            {
                e++; // 其他字符计数器加1
            }
        }

        // 检查子字符串是否符合密码规则:
        // 1. 不包含其他字符(e==0)
        // 2. 至少包含一个指定特殊字符(d>0)
        // 3. 至少包含小写字母、大写字母、数字中的两种(不是a==0 && b==0,也不是a==0 && c==0,也不是b==0 && c==0)
        if(e!=0 || d==0 || (a==0 && b==0) || (a==0 && c==0) || (b==0 && c==0))
        {
            continue; // 如果不符合规则,则跳过当前循环迭代
        }
        else // 如果符合规则
        {
            cout<<m<<endl; // 输出符合规则的子字符串
        }
    }

    return 0; // 程序正常结束
}

by PrismOS @ 2024-12-07 21:52:18

--- 我看不懂这段 ```cpp vector<string> a; for(int i=0;i<t.length();i++){ if(t[i]==','){ a.push_back(t.substr(b,i-b));//!!! b=i+1; } } a.push_back(t.substr(b,t.length()-b)); ``` 你加油吧。。。

by Lixtar @ 2024-12-08 01:48:04

这么喜欢写vector?我也找时间去研究研究


|