C++ 密碼檢查 (求高手!)

這題我想不出來 幫我一下:

題目:

一個好的密碼要包含四種不同的資料種類:

1.大寫字母

2.小寫字母

3.數字

4.符號

請寫一個程式,讓使用者輸入一組密碼,檢查該組密碼是否安全,如不安全,請告知缺乏的資料種類。

#include <iostream>

#include <climits>

#include <cctype>

#include <cstring>

using namespace std;

int main()

{

char code[20],check[20];

int a=0,b=0,c=0,d=0;

cout<<"請設定介於4到12之間的密碼: ";

cin>>code;

cout<<"請再次確認: ";

cin>>check;

for (int i=0;i<strlen(code);i++)

{

if (code[i]!=check[i])

{

cout<<"輸入錯誤!";

return 0;

}

if (isdigit(code[i]))

a++;

else if (islower(code[i]))

b++;

else if (isupper(code[i]))

c++;

else

d++;

}

if (strlen(code)<4 || strlen(code)>12)

cout<<"您的密碼不符合長度!\a\n";

else

cout<<"您好! 輸入的的密碼是: "<<code<<endl<<endl;

if (a==0)

cout<<"沒有數字! \n";

if (b==0)

cout<<"沒有小寫英文字母! \n";

if (c==0)

cout<<"沒有大寫英文字母! \n";

if (d==0)

cout<<"沒有符號! \n";

return 0;

}

2 Answers

Rating
  • 1 decade ago
    Favorite Answer

    #include <iostream>

    #include <cctype>

    using namespace std;

    #define SIZE 12

    //mask bit of status

    #define DIGIT 1 //00000001

    #define LOWER 2 //00000010

    #define UPPER 4 //00000100

    #define SYMBOL 8 //00001000

    #define FULL 15 //00001111

    int main()

    {

    char code[SIZE], check[SIZE];

    char status;

    bool ok;

    do

    {

    status=0; ok=false;

    cin.sync(); //清除輸入緩衝區

    cout << "\n請設定介於4到" << SIZE << "之間的密碼: ";

    cin >> code;

    cout << "請再次確認: ";

    cin >> check;

    for (int i=0;i<strlen(code);i++)

    {

    if (code[i]!=check[i]) {status = -1; break; }

    else if (isdigit(code[i])) status |= DIGIT;

    else if (islower(code[i])) status |= LOWER;

    else if (isupper(code[i])) status |= UPPER;

    else status |= SYMBOL;

    }

    if (strlen(code)<4 || strlen(code)>SIZE)

    cout << "您的密碼不符合長度!\a\n";

    else if (status == -1)

    cout << "您兩次的輸入不相符!\a\n";

    else {

    cout << "\n您輸入的密碼是: "<< code << "\n\n";

    if (status == FULL) {

    cout << "您的密碼安全性極佳,設定完成!\n";

    ok=true;

    }

    else {

    cout << "您的密碼可以接受,但欠缺:";

    if ((status & DIGIT) == 0) cout<<" 數字";

    if ((status & LOWER) == 0) cout<<" 小寫英文字母";

    if ((status & UPPER) == 0) cout<<" 大寫英文字母";

    if ((status & SYMBOL) == 0) cout<<" 符號";

    cout << ",安全性有顧慮!\a\n";

    }

    }

    if (!ok){

    cout << "\n是否重新輸入?(Y:是 其他:否) ";

    cin.sync();

    char ch=getchar();

    if (ch!='Y' && ch!='y') break;

    }

    }while (!ok);

    //在這裡你可根據 ok 來判斷密碼是否設定完成

    //若 ok 為 true,則 code 為設定的密碼

    system("pause");

    return 0;

    }

  • 1 decade ago

    程式課本中後面有很多範例,可以去翻到最後面找找看,這些可以幫助妳很多喔。

    上面那些範例分為好幾種,其中有幾種可以認出你所輸入數值的英文大小寫和數字還有看符不符合長度。

    依照你所提出的問題我認為應該是在字串那一欄的範例哦。

Still have questions? Get your answers by asking now.