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
by Lixtar @ 2024-12-08 01:48:04
这么喜欢写vector?我也找时间去研究研究