1 条题解
-
0
G3002 [GESP202306 三级] 密码合规 题解
知识点:字符串处理、字符分类、规则校验。
解题思路
按逗号拆分密码。逐个检查长度6到12、仅含合法字符、字母大小写数字三类至少两类,并至少含一个!@#$。
为什么正确
各布尔标记描述一条独立规则,全部合取正好是合规条件。
易错点
特殊字符不算入“大小写数字至少两类”;不能只检查是否含特殊字符而忽略非法字符。
复杂度
时间O(字符串总长度),空间O(输入长度)。
参考代码(C++17)
#include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); string line,s; cin>>line; stringstream ss(line); while(getline(ss,s,',')) { bool lo=0,up=0,dig=0,sp=0,ok=1; for(char c:s) { if(c>='a'&&c<='z')lo=1; else if(c>='A'&&c<='Z')up=1; else if(c>='0'&&c<='9')dig=1; else if(string("!@#$").find(c)!=string::npos)sp=1; else ok=0; } if(ok&&s.size()>=6&&s.size()<=12&&lo+up+dig>=2&&sp)cout<<s<<"\n"; } }说明
本题解为配套教学整理,非官方题解。复杂度按本页参考实现计算,题库使用12个自行生成的测试点。
- 1