1. 程式人生 > >PAT-1067 試密碼

PAT-1067 試密碼

1067 試密碼 (20 分)

當你試圖登入某個系統卻忘了密碼時,系統一般只會允許你嘗試有限多次,當超出允許次數時,賬號就會被鎖死。本題就請你實現這個小功能。

輸入格式:

輸入在第一行給出一個密碼(長度不超過 20 的、不包含空格、Tab、回車的非空字串)和一個正整數 N(≤ 10),分別是正確的密碼和系統允許嘗試的次數。隨後每行給出一個以回車結束的非空字串,是使用者嘗試輸入的密碼。輸入保證至少有一次嘗試。當讀到一行只有單個 # 字元時,輸入結束,並且這一行不是使用者的輸入。

輸出格式:

對使用者的每個輸入,如果是正確的密碼且嘗試次數不超過 N,則在一行中輸出 Welcome in

,並結束程式;如果是錯誤的,則在一行中按格式輸出 Wrong password: 使用者輸入的錯誤密碼;當錯誤嘗試達到 N 次時,再輸出一行 Account locked,並結束程式。

輸入樣例 1:

Correct%pw 3
correct%pw
[email protected]
whatisthepassword!
Correct%pw
#

輸出樣例 1:

Wrong password: correct%pw
Wrong password: [email protected]
Wrong password: whatisthepassword!
Account locked

輸入樣例 2:

[email protected] 3
[email protected]
[email protected]
[email protected]
try again
#

輸出樣例 2:

Wrong password: [email protected]
Wrong password: c[email protected]
Welcome in
//正確的密碼中不能有空格,TAB,等非空的字串。所以我們可以採用c++中的cin語句來讀取字串,但是題目中規定接下來的嘗試的密碼中,一行對應一個密碼,並且沒有規定不許存在空格等非空字串,如果此時還是用cin的話,假設該行密碼中間有一個空格,那麼就會按照輸入了兩次密碼來進行判斷,顯然是不正確的。因此,我們在讀取嘗試密碼的時候,我們要採用getline()函式來獲取一行的字串。
#include<iostream>
#include<string>
using namespace std;
int main()
{
  string cm,sm;
  int n;
  cin>>cm;
  cin>>n;
  getchar();//讀掉回車
  for(int i=0;i<n;i++)
  {
    getline(cin,sm);
    if(sm=="#")
    {
      return 0;
    }
    else if(cm==sm)
    {
      cout<<"Welcome in";
      return 0;
    }
    else
    {
      if(i==n-1)
      {
        cout<<"Wrong password: "<<sm<<endl;
        cout<<"Account locked";
        return 0;
      }
      else
      {
        cout<<"Wrong password: "<<sm<<endl;
      }
    }
  }
  return 0;
}