1067 试密码 (20分)

题目

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

输入格式

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

输出格式

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

输入样例

Correct%pw 3
correct%pw
Correct@PW
whatisthepassword!
Correct%pw
#

输出样例

Wrong password: correct%pw
Wrong password: Correct@PW
Wrong password: whatisthepassword!
Account locked

输入样例

cool@gplt 3
coolman@gplt
coollady@gplt
cool@gplt
try again
#

输出样例

Wrong password: coolman@gplt
Wrong password: coollady@gplt
Welcome in

解析

  先将用户输入的密码存储起来,遇到'#'为止,然后依次判断密码的正确性
  若密码错误则输出"Wrong password: " + password,并将密码剩余次数-1,若正确,输出信息后应及时退出
  当密码次数用完或者用户输入的密码判断完应退出循环,若密码剩余次数为0,则输出"Account locked",否则啥也不输出

答案

#include<iostream>
#include<algorithm>
#include<string>
#include<vector>

using namespace std;

int main(){
    string rpassword,upassword;
    vector <string >p;
    int N,i = 0;
    cin >> rpassword >> N;
    getchar();
    while(getline(cin,upassword) && upassword != "#"){
        p.push_back(upassword);
    }
    while(N && i < p.size()){
        upassword = p[i ++];
        if(upassword == rpassword){
            cout << "Welcome in"<<endl;
            return 0;
        }else{
            cout << "Wrong password: " << upassword << endl;
            N--;
        }
    }
    if(!N){
        cout << "Account locked" << endl;
    }
}

posted @ 2020-08-07 15:00  小马小马最可爱  阅读(154)  评论(0)    收藏  举报