S_Kuroko @ 2023-10-04 10:27:47
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
bool flag1=0,flag2=0,flag3=0,flag=0;
int end=0;
for(int i=0;i<=s.size();i++)
{
if(s[i]==','||i==s.size())
{
if(flag1+flag2+flag3>=2&&flag==1&&i-end>=6&&i-end<=12)
{
for(int j=end;j<=i-1;j++)
{
cout<<s[j];
}
cout<<endl;
end=i+1;
flag1=0,flag2=0,flag3=0,flag=0;
}
}
else if(s[i]>='a'&&s[i]<='z')
{
flag2=1;
}
else if(s[i]>='A'&&s[i]<='Z')
{
flag1=1;
}
else if(s[i]>='0'&&s[i]<='9')
{
flag3=1;
}
else if(s[i]=='!'||s[i]=='@'||s[i]=='#'||s[i]=='$')
{
flag=1;
}
else
{
flag1=0,flag2=0,flag3=0,flag=0;
continue;
}
}
return 0;
}
by Mr_Mu @ 2023-11-27 20:13:27
看这个样例:
A8CM,Kfw0h,6OQf,$rMjziuP6b$%,p9b#,0qopAGf@oQlduEl,9x%,!OvzWq7PXKYhYu,hxyd,X4y40leS!
正确输出应该是:
X4y40leS!
而你的代码没有输出。
或者再看离谱一点的样例:
,a1b2c!
正确输出应该是:
a1b2c!
而你的代码是:
,a1b2c!
:(
你的大概思路是如果读取到 ',' 或到最后一个字符时,视为一串密码进行判断。否则就对当前还未结束的密码的字符进行判断。
但!你的判断思路有问题
再看一个样例:
^&*Ab!
有特殊字符 '^','&','*',本不该输出,但你的代码输出了!
因为你的 25~45行有一个缺陷,只要特殊字符不在末尾并且后面的字符能符合密码要求,你的代码就会再次将 flag (1,2,3) 设为真,然后不合规的密码就会被输出!
其他样例就可以顺藤摸瓜思考一下啦~
by S_Kuroko @ 2024-03-13 19:10:18
@Mr_Mu 感谢大佬!最近看洛谷比较少,所以没来得及回
by Mr_Mu @ 2024-08-20 14:37:35
@S_Kuroko 我也好久没上了...