[Algo Beat Contest 005 A] 应试玉符 题解
主要题意
给你一个账号字符串和一个密码字符串,判断它们是否合法。
账号字符串合法的条件为:
- 形式为
ZJ-a。 a是一个正整数,满足 。- 若
a长度不足 位,要用前导零补足。
密码字符串合法的条件为:
- 长度不小于 。
- 包含大写和小写字符。
- 包含数字。
解题思路
这是一道入门的字符串处理题目。
我们按照上面所述的顺序进行判断:
首先要前三位是 ZJ-,然后后面的数字按条件进行判断即可。如果不满足这些,直接输出 Wrong Name。
如果账号符合条件,就判断密码是否符合条件。我们遍历全串,判断所有条件是否符合就行了。若任意一个条件不符合,就输出 Wrong Password。
否则,说明账号和密码字符串都合法,输出 Accept。
代码部分
#include <bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin >> T;
while(T --)
{
string n, p;
cin >> n >> p;
if(!(n[0] == 'Z' && n[1] == 'J' && n[2] == '-') || !(n.length() == 7))//开头格式错误或账号长度错误
{
cout << "Wrong Name" << endl;
continue;
}
bool fg = 0;
int cnt = 0;
for(int i = 3;i < n.length();i ++)
{
if(!(n[i] >= '0' && n[i] <= '9'))//出现非数字字符,说明一定不符合条件
{
cout << "Wrong Name" << endl;
fg = 1;
break;
}
cnt = cnt * 10 + (n[i] - '0');
}
if(fg)
continue;
if(!(cnt >= 1 && cnt <= 9999))//账号不符合条件
{
cout << "Wrong Name" << endl;
continue;
}
bool f1 = 0, f2 = 0, f3 = 0;
for(int i = 0;i < p.length();i ++)
{
if(p[i] >= 'A' && p[i] <= 'Z')//大写字母
f1 = 1;
if(p[i] >= 'a' && p[i] <= 'z')//小写字母
f2 = 1;
if(p[i] >= '0' && p[i] <= '9')//数字
f3 = 1;
}
if(!f1 || !f2 || !f3 || p.size() < 6)//密码不符合条件
cout << "Wrong Password" << endl;
else
cout << "Accept" << endl;
}
return 0;
}
暂无评论