您的位置:首页 > 其它

PAT (Basic Level) 1067 试密码

2020-03-06 12:35 218 查看

当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死。本题就请你实现这个小功能。

输入格式:
输入在第一行给出一个密码(长度不超过 20 的、不包含空格、Tab、回车的非空字符串)和一个正整数 N(≤ 10),分别是正确的密码和系统允许尝试的次数。随后每行给出一个以回车结束的非空字符串,是用户尝试输入的密码。输入保证至少有一次尝试。当读到一行只有单个 # 字符时,输入结束,并且这一行不是用户的输入。

输出格式:
对用户的每个输入,如果是正确的密码且尝试次数不超过 N,则在一行中输出 Welcome in,并结束程序;如果是错误的,则在一行中按格式输出 Wrong password: 用户输入的错误密码;当错误尝试达到 N 次时,再输出一行 Account locked,并结束程序。

输入样例 1:
Correct%pw 3
correct%pw
Correct@PW
whatisthepassword!
Correct%pw
’#
//#号打不出来,带了个’

输出样例 1:
Wrong password: correct%pw
Wrong password: Correct@PW
Wrong password: whatisthepassword!
Account locked

输入样例 2:
cool@gplt 3
coolman@gplt
coollady@gplt
cool@gplt
try again
’#

输出样例 2:
Wrong password: coolman@gplt
Wrong password: coollady@gplt
Welcom

解题思路:
主要就是输入的问题,一定要加 getchar!! ,不然第一个字符串会把你输入完n之后的回车录入。坑死了…

代码:

#include<iostream>
#include<string>
using namespace std;
int main()
{
string password, st[1000];
int n, i, k = 0, count = 0;
cin >> password >> n;
getchar();
getline(cin, st[0]);
while (!(st[k].length() == 1 && st[k][0] == '#'))
{
k++;
getline(cin, st[k]);
}
for (i = 0; i < k; i++)
{
if (password == st[i] && i + 1 <= n)
{
cout << "Welcome in";
break;
}
else if(password != st[i] && i + 1 < n)
{
cout << "Wrong password: " << st[i] << endl;
}
else if (password != st[i] && i + 1 == n)
{
cout << "Wrong password: " << st[i] << endl << "Account locked";
break;
}
}
return 0;
}

ps:博主能力有限,如果读者发现什么问题,欢迎私信或评论指出不足。欢迎读者询问问题,乐意尽我所能解答读者的问题。欢迎评论,欢迎交流。谢谢大家!

  • 点赞
  • 收藏
  • 分享
  • 文章举报
Patrick Star、 发布了30 篇原创文章 · 获赞 3 · 访问量 551 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: