1. 程式人生 > >PAT 1081 檢查密碼(15) (程式碼+思路)

PAT 1081 檢查密碼(15) (程式碼+思路)

1081 檢查密碼(15 分)

本題要求你幫助某網站的使用者註冊模組寫一個密碼合法性檢查的小功能。該網站要求使用者設定的密碼必須由不少於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.

思路:核心:完美密碼--數字,字母必須出現,密碼長度大於6,除點(.)之外的非法字元不能出現 

          這裡用4個值進行邏輯判斷:digit(數字),alpha(字母),point(點),other(非法字元)。

#include<iostream>
#include<string>
using namespace std;
int main()
{
    int n;
    cin>>n;
    string s;
    getchar();
    int digit=0,alpha=0,point=0,other=0;
    while(n--){
        getline(cin,s);
        if(s.length()<6){
            cout<<"Your password is tai duan le."<<endl;
        }
        else {
            for(int i=0;i<s.length();i++){
                if(isdigit(s[i]))
                    digit=1;
                else if(isalpha(s[i]))
                    alpha=1;
                else if(s[i]=='.')
                    point=1;
                else
                    other=1;
            }
            if(other)           //出現非法字元
                cout<<"Your password is tai luan le."<<endl;
            else if(alpha&&digit==0)    //有字母,沒數字
                cout<<"Your password needs shu zi."<<endl;
            else if(digit&&alpha==0)    //有數字,沒字母
                cout<<"Your password needs zi mu."<<endl;
            else     //格式正確
                cout<<"Your password is wan mei."<<endl;
        }
        digit=0,alpha=0,point=0,other=0;
    }
    return 0;
}