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

PAT乙 1081. 檢查密碼 (15)

題目介紹:

    本題要求你幫助某網站的使用者註冊模組寫一個密碼合法性檢查的小功能。該網站要求使用者設定的密碼必須由不少於6個字元組成,並且只能有英文字母、數字和小數點".",還必須既有字母也有數字。輸入第一行給出一個正整數 N(<=100),隨後 N 行,每行給出一個使用者設定的密碼,為不超過80個字元的非空字串,以回車結束。

易錯分析:

1.    在判斷字母的時候大小寫都要判斷。

2.    在輸入密碼的時候,不能用scanf或者cin,因為這兩者都會略過空格等任何空白字元。

程式:

#include <iostream>
#include <string.h>
#include <cstdio>
using namespace std;

int isAlpha(char ch)
{
	return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
}

int isNumber(char x)
{
	return x >= '0' && x <= '9';
}

int isPoint(char x)
{
	return x == '.';
}

int main(int argc, char const *argv[])
{
	int N;
	cin >> N;
	char ch[85];
	getchar();	// 擋回車
	while (N--)
	{	/* 判斷是否有字母 數字 小數點的flag,1表示存在 */
		int flagAlpha = 0, flagNum = 0, flagLegal = 0;
		gets(ch);	// 不能用scanf或者cin,因為會跳過空格
		int len = strlen(ch);
		if (len < 6)
			cout << "Your password is tai duan le." << endl;
		else
		{
			for (int i = 0; i < len; i++)
			{	/* 判斷每個字元是不是都是合法的 */
				if (isNumber(ch[i]) || isAlpha(ch[i]) || isPoint(ch[i]))
				{
					if (isNumber(ch[i]))
						flagNum = 1;
					if (isAlpha(ch[i]))
						flagAlpha = 1;
				}
				else	/* 如果出現不合法的字元 */
				{
					flagLegal = 1;
					break;	// 退出
				}
			}
			if (flagLegal)
				cout << "Your password is tai luan le." << endl;
			else if (flagAlpha && !flagNum)	/* 如果只有字母沒有數字 */
				cout << "Your password needs shu zi." << endl;
			else if (flagNum && !flagAlpha)	/* 如果只有數字沒有字母 */
				cout << "Your password needs zi mu." << endl;
			else if (flagAlpha && flagNum)	/* 長度符合字母數字都有 */
				cout << "Your password is wan mei." << endl;

		}

	}
	return 0;
}