本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母、数字和小数点 .,还必须既有字母也有数字。
输入格式:
输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行给出一个用户设置的密码,为不超过 80 个字符的非空字符串,以回车结束。
输出格式:
对每个用户的密码,在一行中输出系统反馈信息,分以下5种:
如果密码合法,输出Your password is wan mei.;
如果密码太短,不论合法与否,都输出Your password is tai duan le.;
如果密码长度合法,但存在不合法字符,则输出Your password is tai luan le.;
如果密码长度合法,但只有字母没有数字,则输出Your password needs shu zi.;
如果密码长度合法,但只有数字没有字母,则输出Your password needs zi mu.。
输入样例:
5
123s
zheshi.wodepw
1234.5678
WanMei23333
pass*word.6
输出样例:
Your password is tai duan le.
Your password needs shu zi.
Your password needs zi mu.
Your password is wan mei.
Your password is tai luan le.
解题思路:
对输入的字符串进行判断操作,符合哪一种情况就按要求输出。先判断长度,不符合直接下一次循环。符合在向下判断。要定义几个flag标识,代表密码里是否有数组,字母。最后需要根据flag输出。
附:输入完n之后一定要加getchar,不然会出错。
代码:
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
int main()
{
int n;
cin >> n;
getchar();
string st;
for (int i = 1; i <= n; i++)
{
int flag1 = 0, flag2 = 0, flag3 = 0;
getline(cin,st);
if (st.length() < 6)
{
cout << "Your password is tai duan le." << endl;
continue;
}
for (int j = 0; j < st.length(); j++) //长度合法
{
if (!(isalpha(st[j]) || st[j] == '.' || ('0' <= st[j] && st[j] <= '9')))
{
cout << "Your password is tai luan le." << endl;
flag1 = 1;
break;
}
if (isalpha(st[j]))
{
flag2 = 1; //有字母
}
if ('0' <= st[j] && st[j] <= '9')
{
flag3 = 1; //有数字
}
}
if (flag1) //break出循环
{
continue;
}
else //正常出循环
{
if (flag2 == 1 && flag3 == 0)
{
cout << "Your password needs shu zi." << endl;
}
else if (flag2 == 0 && flag3 == 1)
{
cout << "Your password needs zi mu." << endl;
}
else if (flag2 == 1 && flag3 == 1)
{
cout << "Your password is wan mei." << endl;
}
}
}
return 0;
}
ps:博主能力有限,如果读者发现什么问题,欢迎私信或评论指出不足。欢迎读者询问问题,乐意尽我所能解答读者的问题。欢迎评论,欢迎交流。谢谢大家!